-
Object.defineProperty()
-
出现 ... 的中都是数据劫持
-
Vue 就是使用 Object.defineProperty 数据劫持 ,从而实现双向数据绑定
-
数据劫持的对象不能直接改变原对象的值,仅能通过 set 函数更改原始对象的值,才能发生变化
-
Object.defineProperty(_this, kesy, {
value: xxx
// get: 获取扩展属性值, 当获取该属性的时候调用 get 方法
get(){
return xxx
}
// set: 监听扩展属性,只要修改就会被调用
set(newValue){
// _this.username = newValue 千万不要在 set 方法中修改当前的属性值,会出现死循环
data[item] = newValue
}
})
对象
Object.defineProperty()
-
作用
该方法会直接在指定的对象上定义一个新属性,或者修改一个对象的现有属性。通过这个方法添加或修改的属性默认是无法修改的
-
语法
Object.defineProperty(obj, key, descriptor)
-
参数
-
obj 定义属性的对象
-
key 要定义或修改的属性名称
-
descriptor 定义或修改属性的描述
-
descriptor 参数说明
{ configurable: true // 该属性可以被改变或删除 默认 false enumerable: ture // 该属性可以被枚举 默认false value: Number | Object | function 该属性的对应值 默认 undifned get: () => { return undifned // 当访问该属性的时会调用该函数,显示值为 return 的值 } set: setValue => { // key 被修改时会调用这个函数, 接收一个参数(也就是被赋予的新值) } }
-
-
-
返回值
定义后的对象
Object.keys()
-
作用
将对象所有键以数组的形式返回
-
语法
Object.keys(obj)
-
参数
obj 要返回枚举 key 的对象
-
返回值
一个表示给定对象的所有可枚举属性的字符串数组
数组
const players = [
{ name: '科比', num: 24 },
{ name: '詹姆斯', num: 23 },
{ name: '保罗', num: 3 },
{ name: '威少', num: 0 },
{ name: '杜兰特', num: 35 }
]
数组遍历方法
forEach
-
作用
- 遍历数组各项
-
语法
players.forEach((item,index,arr) => { console.log(item,index) }) // {name: "科比", num: 24} 0 // {name: "詹姆斯", num: 23} 1 // {name: "保罗", num: 3} 2 // {name: "威少", num: 0} 3 // {name: "杜兰特", num: 35} 4
-
参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组本身
-
返回值
- null
map()
-
作用: 数组映射
-
语法
let result = players.map( (item,index,arr)=> { return `${item.name}-----${item.num}` } ) console.log(result) // ["科比-----24", "詹姆斯-----23", "保罗-----3", "威少-----0", "杜兰特-----35"]
-
参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
-
返回值
- 返回映射后的数组的,该方法不会改变原数组
every()
-
作用: 检测数组全部元素通过条件
-
语法
let result = players.every((item,index,arr) => { return item.num > 2 }) console.log(result) // false let result1 = players.every((item,index,arr) => { return item.num >= 0 }) console.log(result1) // true
-
参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
-
返回值
- 检测结果 true || false
some()
-
作用: 与
every()
大体相同,some()
检查数组中的元素至少有一个元素通过测试。 -
语法
const result = players.some((item,index,arr) => { return item.name === '科比' }) console.log(result) // true
-
参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
-
返回值
- 测试结果,true || false
reduce()
- 作用: 将执行结果汇总作为单个值返回
- 参数
- callback 执行的回调函数
- total 累积值
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
- initTotal 初始值 初始值可以根据应用场景切换任意值类型 对象 数组 ……
- callback 执行的回调函数
- 语法
let result = players.reduce((total,item,index) => {
return total + item.num
},0)
console.log(result)
// 85
findIndex()
- 作用: 查找符合要求的元素下标
- 参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
- 语法
let result = players.findIndex((item,index,arr) => {
return item.name === '科比'
})
console.log(result)
// 0
- 返回值 :返回第一个符合条件元素的下标,找到符合条件就结束循环。没有找到返回 -1
find()
- 作用: 查找符合要求的元素
- 参数
- item 当前被遍历的项
- index 当前被遍历项的下标
- arr 数组对象
- 语法
let result = players.find((item,index,arr) => {
return item.name === '科比'
})
console.log(result)
// {name: "科比", num: 24}
- 返回值 :返回第一个符合条件元素,找到符合条件就结束循环。没有找到返回 undefined
数组操作元素方法
定义一个默认数组
let array = [1,2,3,4]
splice()
-
作用
splice() 方法可以删除或替换数组元素,会改变原数组
-
语法
array.splice(0, 1,'新加入的值1','新加入的值2') console.log(array) // ["新加入的值1", "新加入的值2", 2, 3, 4]
-
参数
- satrt 指定修改的开始值(从 0 计数)如果是负数则表示从数组末尾的第几位开始
- deleteCount 可选参数 需要删除的元素个数 包括 start
- item1, item2, …… 可选参数 要添加的元素
-
返回值
由被删除的元素组成的一个数组,删除一个元素,则返回只包含一个元素的数组。没有删除返回空数组
fill()
-
作用
fill() 填充数组, 会改变原数组
-
语法
array.fill('填充的数11',0,2) console.log(array) // ['填充的数11', '填充的数11', 3, 4]
-
参数
- fillValue : 填充的值
- satrtIndex可选参数 开始填充的索引值 默认 0
- endIndex可选参数 结束填充的索引(不包括该索引) 默认 -1
-
返回值
返回填充后的数组
includes()
-
作用
includes() 查询数组中是否有某个元素
-
语法
let result = array.includes(2,0) console.log(result) // true
-
参数
- findValue 查询的元素
- startIndex 可选参数 从 startIndex 索引值开始查找
-
返回值
查找到返回 true 没有查找到 返回 false
join()
-
作用
返回将数组元素按照指定的字符分隔的字符串
-
语法
let result = array.join('|') console.log(result) // '1|2|3|4'
-
参数
- str 可选 指定分隔符,如果不传则按照逗号分隔
-
返回值
- 所有元素按照分隔符转成的字符串
splice()
- 作用
- 语法
- 参数
- 返回值