JS复习v01
对象
删
delete obj.xxx || delate obj['xxx']
- delete 作用是用来删除属性的(对象)
- 「属性值为undefined」和「不含属性名(把属性名删掉)」
- 不含属性名
'xxx' in obj === false
- 含有属性名,但是值为 undifined
'xxx' in obj && obj.xxx === undefined
// obj.xxx === undefined 不能断定 'xxx' 是否为obj的属性
eg: 课堂上交片子的时候,问你的片子呢?(obj.pianZiNe)
A B回答没有(obj.pianZiNe === undefined)有两种情况
A:没有片子(不含属性名)(可能没剪好,可能没拍,可能自己把它删了,反正挂了)
B:有但是忘记拷贝了(含有属性名,但值为 undefined)
查
- 查看自身所有属性
Object.keys(obj)
Object.Values(obj) // 查 obj 属性
Object.entries(obj) // 查所有 key 和 value
- 查看自身 + 共有属性
console.dir(obj) // 以目录的形式打印出来
- 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
// 询问自己是否有这个属性
- 查看属性
obj['key']
obj.key
obj.name 等价于 obj['name']
obj.name 不等价于 obj[name]
// 此处name 为字符串,不是变量
let name = 'hhh'
obj[name] 等价于 obj['hhh']
obj.[key] 当key是一个变量时这个的意思是先求变量的值,若没有赋值则为undefined
obj[console.log('name')]
obj['undefined']
// log返回的值永远都是 undefined
改 | 增
- 直接赋值
let obj = {name: 'hhh'} // name 是字符串
obj.name = 'hhh' // name 是字符串
obj['hhh'] = 'frank'
onj[name] = ??? 值不确定
obj['na' + 'me'] = 'hhh'
let key1 = 'name'; obj[key1] = 'hhh'
let key2 = 'name'; obj.key2 = 'hhh' // false,因为 obj.key2 等价于 obj['key2']
- 批量赋值
Object.assign(obj, {age: 18, gender: 'man'})
//obj 赋值给谁, {} 赋值什么
- 修改|增加 共有属性
- 无法通过自身修改或增加共有属性
let obj = {}, obj2 = {} // 共有toString
obj.toString = 'xxx' // 只会改 obj 自身属性,obj2.toString还在原型上
- 非要修改或增加原型上的属性
obj.__proto__.toString = 'xxx' //不推荐使用
Object.prototype.toString = 'xxx'
读的时候可以看隐藏属性对应的原型,写的时候只能写在自己身上
- 修改隐藏属性(修改原型)
let obj = Object.creat(common) // 以common这个对象为原型来创建obj
obj.name = 'hhh'
// 一创建就指定原型,然后再去修改它的name,一起做修改
数组
删
let arr = ['a', 'b', 'c']
delete arr['0']
arr // [empty, 'b', 'c']
// 数组的长度并没有改变
- 删元素
// 1.删除头部的
arr.shift() // arr 被修改,并返回被删除元素
// 2.删除尾部的
arr.pop() // arr 被修改,并返回被删元素
// 3.删除中间元素
// index指的是哪个位置的下标,1是指删几个,删除index的一个元素
arr.splice(index, 1)
arr.splice(index, 1, 'x') // 在删除的位置添加 ‘x‘
arr.splice(index, 1, 'x', 'y') // 在删除的位置添加 'x', 'y'
查
- 查看所有属性名
let arr = [1, 2, 3, 4, 5]
arr.x = 'xxx'
Object.keys(arr)
for(let key in arr){
console.log('${key}: ${arr[key]}')
} // arr里的key遍历
- 查看数字(字符串)属性名和值
for(let i=0; i<arr.length; i++){
console.log(`${i}: ${arr[i]}`)
}
- 要自己让 i 从 0 增长到 length - 1
arr.forEach(function(item, index){
console.log(`${index}: ${item}`)
}) // ta是一个普通函数
- 查单个属性
let arr = [1, 5, 333]
arr[0] // 1
// 索引越界
arr[arr.length] === undefined // 不存在的下标去读会得到一个undefined
arr[-1] === undefined
// 查找某个元素是否在数组里
arr.indexOf(item) // 存在返回索引(下标),否则返回 -1
// 使用条件查找元素
arr.find(item => item % 2 === 0) // 找第一个偶数
// 使用条件查找元素索引
arr.findindex(item => item % 2 === 0) // findindex 返回对应的元素下标,找第一个偶数索引
增
// 1.在尾部加元素
arr.push(newItem) // 修改arr,返回新的长度
arr.push(item1, item2) // 修改arr,返回新长度
// 2.在头部加元素
arr.unshift(newItem) // 修改arr,返回新长度
arr.ubshift(item1, item2) // 修改arr,返回新长度
// 3.在中间添加元素
arr.splice(index, 0, 'x') 在index处插入‘x’
arr.splice(index, 0, 'x' ,'y')
改
// 1.反转顺序
arr.reverse() // 修改原数组
// 2.自定义顺序
arr.sort((a, b) => a-b)
// 3.也可以用splice来修改
arr.splice(3, 1, 2.2) // 3为索引,1为删除1个,2.2为添加的