String
String类型用来表示零个或多个16位的Unicode字符组成的字符序列,即字符串
原文中的这句话说的很直白,但是里面有很多内容值得深入思考(这里有讲解)
字符字面量
特殊的字符字面量也叫转义序列,需要注意的是:
console.log("\'"); //这样才能输出单引号
console.log("\""); //这样才能输出双引号
console.log("\\"); //这样才能输出反斜杠
\n 换行 \t 制表符 \r 回车 \f 进纸 这几个是非打印字符
\xnn 以十六进制代码表示的字符 n(0-f)
\unnnn 以十六进制代码表示的Unicode字符 n(0-f)
这里有个值得考虑的事情就是 \xnn 与 \unnnn 有什么关联和区别?\xnn 能表示的字符数量肯定是不及\unnnn能表示的多,百度之后发现\xnn对应的是ASCII编码标准,\unnnn对应的是Unicode编码标准,如有更深的理解欢迎科普
任何字符串的长度都可以通过起其length属性获取,如果字符串中包含双字节字符,那么字符串的length属性就不能精确的返回字符串中的字符数量了
//js中的字符有单字节的也有双字节的,有的字符是由两个16位的Unicode码编码的
console.log("test".length); // 4
console.log("这是我的?".length); // 6
字符串的不可变性
//这里先定义了str变量初始化赋值为“test”字符串,这里的不可变性说的是执行第二句的时候是将str的值和“my ”字符串拼接成“my test”这个字符串放在了新的内存空间里,然后str再指向这个新的空间地址,原来的“test”字符串的地址里的值并未发生变化,然后垃圾回收器发现“test”字符串没有变量引用后就会删除它
var str = "test";
str = "my " + str;
其他类型转换为String
数值、布尔、字符串、对象都有toString()方法,null和undefined没有
//数值转string,保存Number类型值的变量调用toString()方法的时候可以指定输出值的基数即进制
var num = 20;
num.toString(); // "20"
num.toString(16); // "14"
//布尔值转string
var bool = true;
bool.toString(); // "true"
//对象转string,书中没怎么说到,感觉比较复杂,下面列举了几个简单的代表性对象
var obj1 = [1,2,3],
obj2 = {age: 20, name: "ccc"},
obj3 = function(){console.log("obj3");return true;},
obj4 = new Object("123");
console.log(obj1.toString()); // "1,2,3"
console.log(obj2.toString()); // "[object Object]"
console.log(obj3.toString()); // 'function (){console.log("obj3");return true;}'
console.log(obj4.toString()); // "123"
别的类型转换为字符串类型,在不知道要转换的值是否是null或者undefined的时候更推荐使用String()方法
- 如果要转换的值有toString()方法,就调用它
- 如果是null,就返回null
- 如果是undefined,就返回undefined
如此看来,String()方法应该是封装了toString()方法,然后加上了null和undefined的输出(null和undefined没有toString()方法)