细说 Javascript 对象篇(一) : 对象的运用和属性

Javascript 中的统统都能够视为对象,除了两个惯例:nullundefined

false.toString(); // 'false'
[1, 2, 3].toString(); // '1,2,3'

function Foo(){}
Foo.bar = 1;
Foo.bar; // 1

一个常常轻易被误会的就是数字常量不能视为对象,实际上数字常量依然能够视为对象。这是因为 Javascript 剖析器在剖析点操作符时而将其视为浮点数特性而犯下的毛病。

2.toString(); // raises SyntaxError

实际上,我们有许多要领能够使得数字常量表现为一个对象。

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first

对象作为数据类型

Javascript 中的对象能够当作哈希表运用,它们重要包括键与值的对应关联。
运用 {} 标记来建立一个简朴的对象,这个新建的对象将从 Object.prototype 继续而来,并且不包括自身定义的属性。

var foo = {}; // a new empty object

// a new object with a 'test' property with value 12
var bar = {test: 12}; 

接见对象的属性

我们能够运用两种体式格局来接见 Javascript 的对象,分别是点操作符 . 和中括号操作符 []

var foo = {name: 'kitten'}
foo.name; // kitten
foo['name']; // kitten

var get = 'name';
foo[get]; // kitten

foo.1234; // SyntaxError
foo['1234']; // works

两种操作符的结果险些一样,唯一的不同是中括号操作符许可动态设置属性而且属性名能够有语法毛病。(上例中的第三个情况已申明)

删除对象的属性

删除属性的唯一要领是运用 delete,将属性值设置为 undefinednull 只是移除了与属性相干的值,并没有真正删除属性自身。

var obj = {
    bar: 1,
    foo: 2,
    baz: 3
};
obj.bar = undefined;
obj.foo = null;
delete obj.baz;

for(var i in obj) {
    if (obj.hasOwnProperty(i)) {
        console.log(i, '' + obj[i]);
    }
}

上面的输出 bar undefinedfoo null,只要 baz 真正被删除。
这里要申明一点,delete 只能删除属性,并不能删除变量。所以我们在定义变量时一定要养成写 var 的好习惯,任何时候,变量一定要运用 var 关键字才声明。因为假如不写 var,变量会被误认给全局对象建立了一个新属性。

《细说 Javascript 对象篇(一) : 对象的运用和属性》

这个例子相称清晰给出了答案,a 为变量,而 b 只是一个全局对象的属性罢了。

定名对象的属性

var test = {
    'case': 'I am a keyword, so I must be notated as a string',
    delete: 'I am a keyword, so me too' // raises SyntaxError
};

对象的属性能够用一般字符或字符串来定名。一样也是因为 Javascript 剖析器的一个毛病设想,上例中的第二种示意要领在 ECMAScript 5 中将会抛出一个毛病。
毛病的缘由是因为 delete 是一个关键词,所以必需运用一个字符串常量来定名来顺应老版的 Javascript 剖析器。

参考

http://bonsaiden.github.io/JavaScript-Garden/#object.general

    原文作者:StephenLee
    原文地址: https://segmentfault.com/a/1190000000477429
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞