对象
在 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
方法同样可以用来判断属性的存在情况,它会枚举出包括在原型链上的所有属性,所以你懂的, 结合这几种方法才可以创造完美盛世。