1. 字符串是不可变的。

  2. 每个字符是一个16位的UTF-16编码单元,这意味着一个Unicode字符相当于一个或两个JavaScript字符。

字符串字面量

即用单引号双引号括起来的字符序列。

'string text'
"string text"
"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어"

字符串对象

new String(thing)

String()构造函数得到字符串对象

> var s = new String(123)
> typeof s
'object'
> 

对原始字符串和 String 对象的区分

区分两者很简单。

  1. 字符串字面量 以及 String()函数作为普通函数调用时的返回值,这两种情况下得到的是字符串原始值。

  2. 判断字符串原始值方法为typeof 'xxx',得到‘string’,即

    > typeof 'ad'
    'string'    // 字符串原始值
  3. new String()构造器函数得到的是字符串对象。

  4. 判断字符串对象的方法也为typeof 'xxx', 得到‘object’,即

    > var s = new String(123)
    > typeof s
    'object'    // 字符串对象
    > 
  5. 最重要一点,字符串原始值也可以调用字符串对象所具有的方法,因为JavaScript内部会自动将字符串原始值转化为字符串对象,以调用相关方法,然后恢复。

判断某值是否为字符串

判断某值是否为字符串原始值或字符串对象

function isString (value) {
    return Object.prototype.toString.call(value) === '[object String]';
}

判断某值是否为字符串原始值

function isStringPrimitive (value) {
    return typeof value === 'string';
}

判断某值是否为字符串对象

function isString (value) {
    return Object.prototype.toString.call(value) === '[object String]' && typeof value === 'object';
}

Tammy
111 声望14 粉丝

不易匠心方得始终