JavaScript语言精粹--对象

193 阅读2分钟

前言

JavaScript中的对象是可变的键控集合,除了简单类型外,其他的值都是对象。数组是对象,函数是对象,正则表达式是对象,对象也可以是对象。对象是属性的容器,每个属性都有keyvaluekey的值可以是包括空字符串在内的任意字符串,value的值是除undefined之外的任何值。

对象字面量

  • 对象字面量是不通过*new()*方法创建对象
    • js标准创建对象的方法通常是var obj = new Object(),而使用这种方法创建对象实际上是方法的调用,既然是方法的调用必然会涉及到原型链中的遍历,使得创建对象的时间更长。
    • 字面量则通过var obj = {}创建,更加简便易读运行快。

      两种创建对象方法的区别

      对象字面量创建只能添加静态的属性和方法,通过new函数创建对象则可以通过prototype属性添加共用的属性和方法
  • 对象字面量的创建规则
    • 若属性名即key是合法的JavaScript标识符且不是保留字,可以不用引号括起来
    • 属性之间用逗号隔开,但最后一个属性后不要逗号,不然某些浏览器会报错
    • 对象是可嵌套的,属性的值即value可以是其他对象

检索

  • 通过obj['属性名']obj.属性名来获取对象中属性的值:obj.属性名只能在属性名是合法的JavaScript标识符且不是保留字的情况下使用
  • 当检索的属性值不存在时,返回undefined
var obj = {
    name: 'Jack',
    age: 18
}
var obj2 = {
    name: 'Joe'
}
console.log(obj['name']) // 'Jack'
console.log(obj.name) // 'Jack'
console.log(obj2.age) // undefind

更新

  • 通过赋值语句更新属性值
    • 若属性存在则替换其中的值
    • 若属性不存在则在该对象中添加该属性
var obj={
    name: 'Jack'
}
obj.name = 'Joe'
obj.age = 18
console.log(obj) // { name: 'Joe', age: 18}

引用

JavaScript中,基本数据类型的名和值都存放在栈内存中,引用类型的存放在栈内存中存放在堆内存中,同时在栈内存中存在一个指向堆内存中值的指针,当对基本数据进行赋值,会在栈内存中创建新的名和值,而对引用类型进行赋值则在栈内存中创建新的名,同时将获得一个指向同一块内存的指针。

  • 在JavaScript中,基本类型赋值只是值的传递,它们的地址并不会传递
  • 引用类型的数据如对象、数组等,赋值操作会将地址传递给另一个对象
  var a = 2
  var b = a
  b = 1
  console.log(a) // 2
  console.log(b) // 1
  var obj1 = {
      name: 'Jack',
      age: 18
  }
  var obj2 = obj1
  obj2.name = 'Joe'
  console.log(obj2.name) // Joe
  console.log(obj1.name) // Joe