主要参考网道文档:https://wangdoc.com/javascript/types/string.html
字符串
字符串就是用""和''连接起来的空的或者字符的串
比如 'abx'
和 "abddf"
。
单引号和双引号可以自由嵌套。
但是在单(双)引号中套用单(双)引号时,要加上\来表明转义:
'Did he say\'hello\ ?'
注意字符串不能在多行表示
'a
b'//error
'ab'//true
如果想分成多行表示可以在后面加\来表示,注意反斜杠后面必须是转行,不能出现空格。
连接符"+"可以连接多个单个字符串
字符串可以看成是字符串数组
但是不能改变其中的值,用delete.push等操作会无效
base64转码
函数表示:btoa():任意值转为base64编码
atob():转base64码为任意值
var string ='Hello World!';
btoa(string)
atob('SGVsbG8gV29ybGQH')
注意这两个方法不适非ASCII码的使用,如果想使用的话要如下所示的操作:
function b64Encoder(str){
return btoa(encodeURIComonent(str));
}
function b64Decode(str){
return decodeURIComponent(atob(str));
}
b64Encoder('你好')
b64Decode('JUUOJUJEwJUU1JUE1JUJE')
对象
对象就是一组键值对(key-value)的集合,是一种无序的复合数据集合。
eg:
var obj={
foo:'hello',
bar:'world'
};
上面的代码及定义了一个名为obj的对象,它用大括号扩括起来,该对象里面有 两个键值对(成员)分别是foo:'hello'和bar:'world',其中foo和bar是键名(成员名),hello和world是键值(成员的值),他们之间用“:”相连,键值对用“,”相连。
键名
所有对象的键名都是字符串(Symbol也可以),所以也可以加上引号表示,如果键名是数值,也会被自动转换成字符串的!!!
但是如果键名不是标识符的形式,就要给它加上引号:
var obj={
'1p'='fffan',
'h w'='hcjkd',
'a+c'='gdjshjd0'
}
对象中的每个键名又叫做属性(property),它的键值可以是任何类型。如果一个属性的值为函数,通常把这个属性就叫做“方法”,它可以像函数那样调用。
var obj={
p:function(x){
return 2*x;
}
};
console.log(obj.p(1));
上面的代码中,对象obj的属性就是一个函数,它可以直接调用。
如果属性的值还是一个对象,就是链式引用。
var o1={};
var o2={
bar :'hello'
};
o1.pool=o2;
console.log(o1.pool.bar);//输出hello
o1.pool.bar
就相当于是o2.bar
。
注意一下以下代码:
console.log(eval('{foo:123}'));
console.log(eval('({foo:123})'));
//输出:123 { foo: 123 }
解释以上代码,第一个没有加圆括号表示它是一个代码块,第二个加了圆括号,表示它是一个对象。
属性的读取
读取对象的属性有两个方法,分别是用点运算符,和 [ ]运算符。
var obj={
p:'hello world'
};
console.log(obj.p);//hello world
console.log(obj['p']);//hello world
注意使用[ ]引用时,必须要加' '(不过数字可以不用,因为数字会被处理成字符串),否则会被当成变量处理的。用点不易出错,用数值表示 的属性不能直接用点号引用,因为会被当成是小数点。
用点和方括号也可以实现赋值:
var obj={};
obj.foo='hello';
obj['bar']='world';
属性的操作
(1)属性的查看:
var obj={'pool':'hello',
'bar':'world'};
console.log(Object.keys(obj));
//输出['pool','bar']
我们可以用Object.keys()方法来查看我们想看的对象的属性。*注意这里是大写的O。
(2)属性的删除
delete命令用于属性的删除,删除后会返回true。
ar obj={'pool':'hello',
'bar':'world'};
delete obj.pool//返回true
console.log(obj);
//输出{bar:'world'}
从以上代码我们可以看出属性pool已经不在,已经用detele命令删除。
注意delete命令只能删除对象本身的属性而不能删除继承的属性。
var obj={};
delete obj.toString
console.log(obj.toString);
//输出为[function:toString]
以上代码证明这个继承的属性toString没有被删除,虽然delete obj.toString会返回一个true.
(3)判断属性是否存在:用in运算符:
var obj={ p:1};
console.log('p'in obj);
console.log('toString'in obj);
// true
//true
在以上代码中,toString虽然没在obj对象中,但是它是obj的一个继承属性,所以显示为true。
我们可以看出in运算符不能分辨出继承属性和原生属性,这时我们可以用hasOwnProperty()
方法来判断一下:
var obj={ p:1};
if('toString'in obj){
console.log(obj.hasOwnProperty('toString'));
}//输出false
(4)遍历属性:用for... in..
var person={name:'rose',height:'174',face:'beauty'};
for(var key in person){
if(person.hasOwnProperty(key))
console.log(key);
}
//输出name height face
以上代码,用了for..in来遍历对象person,然后用了hasOwnProperty()方法来判断是否为原生属性,最后输出这些原生属性。
``
网友评论