第5章 基本引用类型
5.3原始值包装类型
我们知道原始值不应该有方法,而实际上这个例子又确实执行了,这是因为后台进行了很多处理。
let s1 = "some text"
let s2 = s1.substring(2)
console.log(s2) //me text
具体来讲,当第二行访问s1时,是以读模式来访问的,也就是要从内存中读取变量保存的值,再以读模式访问字符串值的任何时候,后台执行以下3步
- 创建一个String类型的实例
- 调用实例上的特定方法
- 销毁实例
可以想象成:
let s1 =new String("some text")
let s2 = s1.substring(2)
s1 = null
引用类型与原始值包装类型的主要区别在于对象的生命周期,在通过new实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问它的那段代码执行期间。下面执行到第二行代码时确实创建了String对象,但是当第三行代码执行时,这个对象已经被销毁了,实际上第三行代码这里创建了自己的String对象,但是这个对象没有color属性。
let s1 = "some text"
s1.color = "red"
console.log(s1.color) //undefined
5.3.1Boolean
这里不小心是会容易出错的,falseObject是对象,所以为true。当然,书中建议永远不要使用这个,以免混淆。
5.3.2Number
toPrecision()方法, 所传的数值即为用几位数字表示。
5.3.3 String
ECMAScript提供了3个从字符串中提取子字符串的方法,slice(),substr(),subString()
这三个方法都接收一个或者两个参数,如果没有第二个参数,代表截取到末尾,第一个参数都代表字符串开始的位置,第二个参数对slice和subString来说,代表截取结束位置(该位置之前的字符会被提取出来),对于substr对二个参数代表返回字符串的数量
let a = 'Hello World'
console.log(a.slice(1))//ello World
console.log(a.slice(1,3)) //el
console.log(a.substr(1,3)) //ell
console.log(a.substring(1,3)) //el
如果传递为负值,表现则不同,
- slice会将所有负值参数都当成字符串长度加上负值,当负数参数都加上字符串长度变为正数后,若第一个参数(start)大于等于第二个参数(end),则取不到任何字符或数组,返回空字符串 “” / 空数组 []
- subString会将所有负值参数都转化为0
- substr会将第一个负值参数当成字符串长度加上负值,第二个负值参数为0代表返回0个字符
let a = 'Hello World'
console.log(a.slice(-2))//ld
console.log(a.substr(-2)) //ld
console.log(a.substring(-2)) //Hello World
console.log(a.slice(-2,-4)) //""空字符串
console.log(a.slice(-4,-2))// or
console.log(a.substr(2,-3)) //“” 空字符串
console.log(a.substring(2,-3)) //Hello World
第6章 集合引用类型
数组方法
slice()截取
splice()在数组中间插入元素
6.2.12 搜索和位置方法
- indexOf,lastIndexOf,includes内部试了一下,使用的都是全等(===)
- find(), findIndex()
3.reduce()索引从1开始,prev代表第一个值