JS秘密花园摘要

一、对象

对象的使用与属性

JS中所有的变量都可以当对象使用,除了两个例外null和undefined。

false.toString(); // 'false'
[1, 2, 3].toString(); // '1,2,3'
function Foo(){}
Foo.bar = 1;
Foo.bar; // 1
复制代码

数字的字面量不能当对象。

2.toString(); // 出错:SyntaxError
复制代码

对象作为数据类型,使用{}创建一个简单的对象,这个新创建的对象从Object.prototype继承下面,没有任何自定义属性。

var foo = {}; // 一个空对象
// 一个新对象,拥有一个值为12的自定义属性'test'
var bar = {test: 12}; 
复制代码

访问对象的属性

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

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

foo.1234; // SyntaxError
foo['1234']; // works
复制代码

删除属性:删除属性唯一方法是delete操作符

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 undefined和foo null
复制代码

二、原型

判断一个对象是否包含自定义属性而不是原型链上的属性,我们需要使用继承自Object.prototype的hasOwnPrototype方法。

// 修改Object.prototype
Object.prototype.bar = 1; 
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
复制代码

JS不会保护hasOwnProperty作为属性被非法占用,因此如果一个对象碰巧存在这个属性,就需要外部的hasOwnProperty函数来获取正确的结果。

var foo = {
    hasOwnProperty: function() {
        return false;
    },
    bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // 总是返回 false

// 使用其它对象的 hasOwnProperty,并将其上下文设置为foo
({}).hasOwnProperty.call(foo, 'bar'); // true
复制代码

三、函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值