js 字符串(一)

113 阅读3分钟

字符串

字面量创建(基本字符串)

let str1 = '单引号', str2 = "双引号";
// javascript 字符串不区分单引号和双引号

// 长字符串写成多行的方式
let longStr1 = '11111111111111111111' +
'2222222222222222222222' +
'333333333333333333';
let longStr1 = '11111111111111111111\
2222222222222222222222\
333333333333333333';
// 注意:使用反斜杠字符(\)要确保反斜杠后面没有空格或任何除换行符之外的字符或缩进,否则反斜杠将不会工作。

console.log(longStr1 === longStr2)  // true


// ES2015 新增模板字符串 里面可以使用变量
let str = `模板字符串`
let a = '变量';
console.log(`这是一个${a}`);  // 输出: 这是一个变量

String 构造函数

String()

将其他值生成或转换成基本字符串

String()   // '' 空字符串
String(1)   // '1'
String('1')   // '1'
String(true)   // 'true'
String(null)   // 'null'
String(undefined)   // 'undefined'
String({})   // '[object Object]'
String([])   // ''
String([1,2])   // '1,2'
String(function(){})   // 'function(){}'

String() 和 toString() 区别

使用 String() 方法将其它对象转化为字符串可以被认为是一种更加安全的做法,虽然该方法底层使用的也是 toString() 方法,但是针对 null/undefined/symbols,String() 方法会有特殊的处理
String 构造函数原型上的toString方法覆盖了Object 构造函数原型上的 toString 方法;并没有继承 Object.toString()。对于 String 对象,toString 方法返回该对象的字符串形式,和 String.prototype.valueOf() 方法返回值一样。两者都不改变原String对象,返回一个字符串。

// toSting()可以把String对象转换成基本字符串  等同于ValueOf()

let str = new String('String对象');
str.toString();     // return 'String对象'   
str.valueOf();      // return 'String对象'

''.toString();      // return ''
' '.toString();     // return ' '
'123'.toString();   // return '123'
[].toString();      // return ''
[1,2].toString();   // return '1,2'
true.toString();    // return 'true'
let obj = {};
obj.toString();     // return '[object Object]'

new String() 可以创建字符串对象

let commonStr = '基本字符串';
let objStr = new String('字符串对象');
console.log(commonStr);  // '基本字符串'
console.log(objStr);     // String {'字符串对象'}
console.log(typeof commonStr);  // 'string'
console.log(typeof objStr);     // 'object'

基本字符串和字符串对象的区别

字符串类型创建方式类型使用eval()方法转换方式
基本字符串字面量创建和String方法( '' "" `` String())字符串将基本字符串作为源代码处理new String ()
字符串对象构造函数创建( new String() )对象字符串对象则被看作对象处理, 返回对象valueOf ()
s1 = "2 + 2";               // creates a string primitive
s2 = new String("2 + 2");   // creates a String object
// eval函数会将传入的字符串当作js代码进行执行
console.log(eval(s1));      // returns the number 4
console.log(eval(s2));      // returns the object String {"2 + 2"}
console.log(typeof eval(s2)); // 'object'

// valueOf() 方法可以把字符串对象转换为其对应的基本字符串
console.log(s2.valueOf() === s1);  // true

数字和字母对应的Unicode编码

0-9a-zA-Z
48-5797-12265-90

String.prototype 上的方法

charAt(index)

描述:从一个字符串中返回指定的字符
参数:index(介于0和字符串长度减一之间的整数),index默认为0
返回值:字符串

let str = 'abcd';
str.charAt();    // return 'a'
str.charAt(1);   // return 'b'
str.charAt(5);   // return '' 空字符串 

// 或者把字符串当作类似数组的对象
str[1];          // return 'a'
str[5];          // return undefined

indexOf(searchValue[, fromIndex])

描述:检查某一字符串在父子符串中的位置
参数: indexOf()

let str = '12345';
str.indexOf();    // return -1
str.indexOf('');    // return 0
str.indexOf('1');    // return 0
str.indexOf('6');    // return -1