欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js中关于对象的那些事

程序员文章站 2022-05-04 19:45:45
...

对象的使用

<1> 对象的是定义

一: 字面量

var obj={}

二: 构造函数定义

var obj=new Object({})

<2> 对象的使用 :

(1) 点语法使用 => obj.key 

(2) 中括号使用 => obj['key']
var obj={
    a:1,
    b:'1',
    c: true,
    d:function(){
        
    },
    e:[1,2,3],
    f:{
        h:1
    }
}

//获取值 查(里面的值)

obj.a === obj['a']
obj.f.h === obj['f']['h']

//增 新增一个不存在的键
obj.key='2' === obj['key']='2'

//删 delete obj['key']或者 delete obj.key

delete obj.a === delete obj['a']

 //该 obj['key']=新值 或者 obj.key=新值
 obj.b=新值 === obj['b']=新值

<3>特性: 引用类型(赋值时不会复制内容而是把内存地址赋值给变量,一处更改,所有使用的地方都会改变)

var a={ test:1}
var b=a
b.test=2
console.log(a.test) //2

<4>高级用法

(1)遍历 for in || for of(对对象结构特性有要求)

(1)obj.hasOwnProperty(key) //判断key是不是obj自己的属性,非原型上的属性

for (const key in object) { //没有兼容性问题
  if (object.hasOwnProperty(key)) {
    const element = object[key];
    
  }
}

for (const iterator of object) { //普通对象不可用,对象必须具有迭代特性,类似于数组 ,该方法一般只用作对数组的遍历
 
}

//el:
var obj = {
      a: 1,
      b: '1',
      c: true,
      d: function () {

      },
      e: [1, 2, 3],
      f: {
        a: 1
      }
    }
    
for (const key in obj) { //默认 for in会把对象本身属性和方法包括原型对象上属性和方法的都遍历出来
  if (obj.hasOwnProperty(key)) { //只打印对象本身属性,不打印原型上的属性
    console.log('key',key,'val',obj[key])
  }
}
//  key a val 1
//  key b val 1
//  key c val true
//  key d val ƒ (){

//      }
//  key e val (3) [1, 2, 3]
//  key f val {a: 1}

const obj = { length: 3, 0: 'foo', 1: 'bar', 2: 'baz' };
 
const array = Array.from(obj);
for (const value of array) { 
    console.log(value);
}
//foo
//bar
//baz

(2)

JSON.stringify(obj) //把对象转化成json字符串

JSON.parse(obj的json字符串) //把json格式字符串还原回对象

var obj2={
  a:1,
  b:{
    c:2
  }
}
var strObj=JSON.stringify(obj2)
console.log(strObj);

// {"a":1,"b":{"c":2}}

var obj=JSON.parse(strObj)
console.log(obj);

//{
// a:1,
// b:{
//  c:2
// }
//}


拓展:对象深度克隆方法

var cloneObj=JSON.psrse(JSON.stringify(要克隆的对象))

(3) es6

var newObj=Object.assign({},obj1,obj2,...) //对象的合并 浅克隆

合并原则: 从右至左,相同的键,发生值覆盖,不同的键,发生值添加,最后把合并好的结果return回去

var obj={
  a:1,
  b:{
    c:2
  }
}
var obj2={
  a:2,
  e:33
}
var newObj=Object.assign({},obj,obj2)
console.log(newObj);
// {a: 2, b: {…}, e: 33}

(4)

Object.keys(obj) //把obj中所有的键提取出来放到一个数组中

Object.keys(obj2)
//(2) ["a", "e"]

Object.values(obj) //把obj中所有的键对应的值提取出来放到一个数组中

Object.values(obj2)
//(2) [2, 33]

Object.entries(obj) //把obj中所有的键值对的提取成一个数组再放到一个数组中,

Object.entries(obj)
// [ ["a", 2], ["e", 33] ]