「JS笔记」复习v01

146 阅读3分钟

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为添加的