基本类型与包装类型
理论上讲,str
是 基本类型数据,不是对象,它哪来的slice
方法?
事实上,在访问 基本类型数据 时,后台会创建一个对应的包装类型的对象,这样,就可以调用一些方法来操作 基本类型数据。
所以,var copyStr = str.slice(0)
相当于,
相等 or 不相等
第1列:引用变量s1
、引用变量s2
指向的同一个地址,所以相等;
第2列:引用变量s1
、引用变量s2
分别指向了两个不同的地址,所以不相等;
第3列:变量s1
、变量s2
指向了同一个字符串值'abc'
,所以相等。
对于对象等引用类型来说,两个对象只有指向了同一个地址才相等,即使这两个对象的属性及其属性值完全一致。
对于基本类型来说,值相等就相等。
字符串的immutable
期望改成 'dad'
,but still 'bad'
,无法直接修改其中的字符,为什么??
immutable!!
之前,我们了解过 数据属性的特性:value
、writable
、enumerable
和 configurable
。
writable
为false
,意味着属性无法被改写;configurable
为false
,意味着属性无法被delete
。
如果想改,该怎么办?
- 赋一个新的字符串给str
- 调用字符串方法返回新字符串,但不会改变原字符串
常用方法
charAt(index)
返回索引在index
上的字符charCodeAt(index)
返回索引在index
上的字符的unicode码
slice(startIndex,endIndex)
截取部分字符串,这部分字符串的索引范围是闭区间[startIndex,endIndex-1]
substring(startIndex,endIndex)
截取字符串,这部分字符串的索引范围是闭区间[startIndex,endIndex-1]
substr(startIndex,len)
截取部分字符串,这部分字符串的索引从startIndex
开始,总字符数为len