对象声明
js中对象的两种声明方式
- var obj = {};
- var obj = new Object();
null 不属于 object
尽管 typeof(null) 返回一个 “object”但是null并不是一个object,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型,null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“object”。
“类”
- String,Number,Boolean,Object,Function,Array,Date,RegExp,Error
- 从形式上比较像类的概念,但实际上只是个实现了一些复杂功能的函数
var str = "123";
var str2 = new String("123");
typeof str2 //'object'
typeof str1 //'string'
“访问对象的成员/属性”
- .key :”通常称为属性访问“
- [key] : “通常称为键访问”
- 两者的不同之处
[key]的形式可以进行一些计算,可以使用字符串的形式进行访问
例如
var obj = {
"123456" : 2
}
obj["123" + "456"] // 2
如果你使用 string(字面量)以外的其他值作为属性名,
那它首先会被转换为一个字符串。
例如
var obj2 = {
}
obj[obj2] ===> obj['[object Object]']
js中的“方法”
function foo() {
console.log(this.a)
}
var obj = {
foo : foo
}
因为js中对象对于函数的保存也仅仅是保存了函数的引用,而函数本身
的this指向也是动态地进行绑定所以函数与对象之间并没有直接的关系
对象属性的另一种设置方案
Object.defineProperty( obj, 'key', {
value: '',
writable: boolean,
configuration: boolean,
enumrable: boolean
...
})
```
表示为obj对象配置'key'