美文网首页
对象的属性差异

对象的属性差异

作者: 默成S | 来源:发表于2018-01-04 21:23 被阅读0次

对象是js重最重要的概念之一。
在定义对象是,常用的方式是”属性定义“大法:

var obj = {
  name: 'xiaoming',
  age: 18,
  isStudent: true  
}

上面obj有3个属性,分别是name、age、isStudent。
除了”属性定义“大法,可以运用”键值定义“大法:

var obj = {
  "name": 'xiaoming',
  "age": 18,
  "isStudent": true  
}

”键值定义“对象方式和json对象格式一样,这也是为什么在js中,所谓的json对象和普通对象经常混为一谈。
这两种方式的共同点是什么?差异又是什么?


以上两种方式在定义对象时一般情况下可以混搭

var obj = {
  'name': 'xiaoming', // 键值
  age: 18,  // 属性
  isStudent: true // 属性
}

混搭后,可以正常的访问属性:

// 通过键访问name
console.log(obj['name'])
=> xiaoming

// 通过属性访问age
console.log(obj.age)
=> 18

也可以反过来:

// 通过属性访问name
console.log(obj.name)
=> xiaoming

// 通过键值访问age
console.log(obj['age'])
=> 18

通过这两个案例,一般情况下我们可以随意用属性访问的方式或键值的方式访问,但是,遇到特殊情况时:

var obj = {
  'my name': 'xiaoming', // 键是‘my name’,有一个空格
  age: 18,  // 属性
  isStudent: true // 属性
}

此时,'my name'只能通过键值访问方式来访问内容,而不能用属性方式

console.log(obj['my name']);
=> xiaoming

console.log(obj.my name);
=> error!!!!
键值方式可以采用任意字符,哪怕是中文也可以。

var obj = {
  '姓名': 'xiaoming', // 键是‘my name’,有一个空格
  age: 18,  // 属性
  isStudent: true // 属性
}
console.log(obj['姓名']);
=> xiaoming

总结:

键可以用任意字符,不满足js的变量命名方式也可以。
属性必须满足js的变量命名方式才可以。
键是可以是一个表达式的值
当键是一个表达式值时,设置和访问时都是可以动态计算的。

var list = ['xiaoming', 'xiaohua'];

var obj = {};

for (var i = 0; i < list.length; i++) {
  obj['name=' + list[i]] = list[i];
}

console.log(obj);
=> { 'name=xiaoming': 'xiaoming', 'name=xiaohua': 'xiaohua' }

总结

键可以是表达式,动态构建,访问时也可以动态构建键。
属性不具备这个特性。
不管是键值还是属性,都适用于值为函数时

var obj = {
  '姓名': function () {
    console.log('xiaoming');
  },
  age: function () { 
    console.log(18)
  },
}

obj['姓名']();
obj.age();

总结

用键值还是属性,主要考虑键和属性的命名差异点,至于后面的值是什么类型无所谓。
构建动态的键,有什么应用场景
比如前端会按照分页的方式从服务端获取数据,那么每一页的数据都可以通过动态构建键的方式存储在obj对象中。

var obj = {};

getData(page) {
  axios.get('url', params: {page}).then(function (response) {
    obj['page=' + page] = response.data;
  });
}

getData(1);
getData(2);
getData(3);

以上obj感觉像是一个键值对的数据库对象,再使用内容时操作起来很方便。

相关文章

  • 对象的属性差异

    对象是js重最重要的概念之一。在定义对象是,常用的方式是”属性定义“大法: 上面obj有3个属性,分别是name、...

  • 使用Java反射机制实现对比两个对象的属性差异

    1、对比两个对象的属性差异 2、获取对象不为空的属性

  • 对比2个对象属性的差异

    由于需要做一个详情日志的功能,就是需要记录每次修改,具体变动的属性值变化,所以需要这么一个工具 本次是站在数据库角...

  • 原型模式-Swift

    Prototype 原型模式是通过现有对象的所有属性来复制自身,创建一个新的对象。当类的实例间差异仅是属性值的不同...

  • Object对象

    object 对象 在对象中保存的值称为属性 向对象中添加属性 语法:对象.属性名 = 属性值读取对象中的属性 语...

  • 07_类中的方法

    属性:对象的属性(属性).类的属性(类的字段)对象属性:属于对象的,不同的对象对应的值可能不一样(对象属性,通过对...

  • hz-对象的属性深入理解

    Object.defineProperty(要操纵的对象,对象的属性,对象属性的配置) 对象的属性 分 数据属性和...

  • 2018-07-31python学习面向对象(三)类方法与对象方

    属性: 对象的属性(属性)、类的属性(类的字段)对象属性:属于对象的,不同对象对应的值可能不一样(对象属性,通过对...

  • 第六章 面向对象的程序设计(js高级程序设计)

    Object-Oriented 面向对象 理解对象 对象属性分为 【数据属性】 和 【访问器属性】 对象属性中的【...

  • 数值对象-Math对象

    一、Math对象的属性 Math对象的属性往往都是数学中常用到的“常量”,Math对象属性如下:Math对象属性 ...

网友评论

      本文标题:对象的属性差异

      本文链接:https://www.haomeiwen.com/subject/jtldnxtx.html