JS 核心知识整理-对象

对象

JavaScript 中,一般使用字面量的方法新建对象,表现形式为多个名值对。

对象属性的不同

有一个需要留意的地方,对象的属性名与变量名是不同的,属性名字可以是包括空字符串在内的任何字符串,举个例子:

var obj = {
first_name = 1,
"first-name" = 2
};

回顾一下,在 js 中,标识符就是 _$a-Z开头后,选择性加上 0-9 的字符组合,标识符中是没有 -的,但是在对象的属性中,可以使用中划线 -,但是需要为属性名加引号。
不过这样带来的问题也比较蛋疼,在 JS 中,只有两种方法可以读取属性,我们来看看:

var a = { a-b: 1}
// Uncaught SyntaxError: Unexpected token -
var a = { "a-b": 1};
a.a-b 
// Uncaught ReferenceError: b is not defined(…)
a."a-b"
// Uncaught SyntaxError: Unexpected string
a["a-b"]
// 1

只能说略有蛋疼...还是不要考虑这样的用法了,做个安静的美男子。
总结起来,如果是属性值是标准的字符串字面量(反例是这种蛋疼的情况 a.012 ),同时是一个合法的标识符,那么可以使用 . 表示法检索,其他情况必须使用["key"]的方法检索。
对象除了简单的检索外,还可以结合双目运算符,进行一些简单的操作,比如说赋默认值,规避 TypeError 等等。如下:

var a = store["data"] || "pen";
var a = filght.eq && flight.eq.model;

增删查改

  • 通过赋值语句为对象赋值的时候,如果已经有了,那么会覆盖,如果没有,则会新建。
  • 对象按照引用进行传递,不会发生像基本类型一样的复制。
  • 所谓原型链在对象进行更新的时候,是不会被改变的,增改会发生在对象本身上,原型链只有在检索的时候才有用处。
  • delete方法用来删除对象本身存在的属性,不会影响原型链,这个运算符常常用来透现原型链上的属性。

对象属性的检测

使用 typeof 操作符,可以判断值的类型。如果需要单单检测属性,可以通过这个操作符来抛弃为 function的方法值。
hasOwnProperty(keyName) 方法查看某个属性是否是对象独有的。
for in方法同样可以用来判断属性的存在情况,它会枚举出包括在原型链上的所有属性,所以你懂的, 结合这几种方法才可以创造完美盛世。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,186评论 6 13
  • (一)他深信在这个苦寒深夜冬的阵地绝不会沦陷雪花和冰块这两个凝结了冬之奥义的绝世强者必定会掀起灭世的龙卷将开始复苏...
    刘汉皇阅读 276评论 0 2
  • 家庭教育相对而言是一件让人很头疼的事情,“一千个人心中一千个哈姆雷特”更何况教育方式。因此教育方式也是五花八门的,...
    恰是逝水流年阅读 410评论 0 1
  • 最能代表春日花事的,莫过于桃花开了。“竹外桃花三两枝,春光水暖鸭先知”、“桃红又见一年春”、“桃花春色暖先开...
    我爱澄阅读 340评论 1 1