JavaScript学习笔记02
11.typeof
运算符返回对象的类型 返回值是一个字符串
对null
会返回'object'
对函数会返回'function'
需要特别注意
12.delete
运算符用来删除对象的属性或者数组元素
当用来删除数组元素的时候 数组的长度不会发生变化
当删除成功 或者 待删除的元素不是一个左值导致没必要删除时 返回true
如果不可删除 返回false
利用var
定义的变量不可以删除(不用var
声明的全局变量就可以删除) 例如:
delete 1;// 待删除的不是左值 不必删除 返回true
var o = { x : 1, y : 2};
delete o.y;// 删除成功 返回true
delete o;// 不可删除 返回false
13.异常处理语法
try {
} catch(e) {
} finally {
}
就算try
块使用了return
、continue
、break
语句跳出try
块 finally
块中的语句一定会在跳出前执行
如果finally
抛出了异常 则该异常将代替正在处理的异常
如果finally
运行到了return
语句 就算try
块抛出了异常 函数仍然会正常返回
13.创建对象的三种方式
- 使用对象的直接量
属性名可以是标识符 也可以是字符串直接量(包括空字符串)
var point = {
x : 1,
y : 2
};
var book = {
'title' : 'manga',
'author' : 'ore'
};
- 使用new创建对象
var a = new Object();
- 使用
Object.create()
方法(ECMAScript5专用)
第一个参数为原型 第二个参数可选
Object.create(Object.prototype);// 创建一个空对象
Object.create(null);// 不提供原型 则创建的对象不继承任何东西 比如toString()方法
14.访问对象属性(两者都可以访问标识符或字符串直接量形式命名的属性)
- 对象名.属性名
例如 obj.x
属性名必须是标识符
- 对象名[属性名]
例如 obj['x']
属性名必须是字符串(或者可以计算为字符串的表达式)
这种方式更加灵活 因为第一种方法属性名标识符是写死的 第二种则可以通过计算得到
15.检测某个对象是否有某个属性的方法
- 使用
in
运算符
in
运算符的左边是代表属性名的字符串,右侧是对象
当对象的自有属性或者继承属性包含这个属性 则返回true
var o = { x : 1};
'x' in o;// true
'toString' in o;// true
'y' in o;// false
- 使用对象的
hasOwnProperty()
方法
这个方法只能检测对象是否包含这个自有属性 对于继承属性 它将返回false
var o = { x : 1};
x.hasOwnProperty('x');// true
x.hasOwnProperty('toString');// false toString是继承属性
- 使用对象的
propertyIsEnumerable()
方法
这个是hasOwnProperty()
方法的强化版 只有检测到自有属性是可枚举的
才会返回true
某些内置的属性是不可枚举的 通常由JavaScript代码创建的属性都是可枚举的
Object.prototype.propertyIsEmurable('toString');// false 不可枚举
16.枚举属性
- 使用
for in
循环
会返回对象所有的可枚举属性 包括继承属性
如果只需要自有属性,可以用hasOwnProperty()
函数判断 或者用下面的Object.keys(
)方法
- 使用
Object.keys()
函数 ECMAScript5以上才可使用
这个方法会返回一个包含传入对象的所有可枚举自有属性的数组对象
var o = {
firstName : 'John',
lastName : 'Smith',
gender : 'male'
};
Object.keys(o).forEach(function (prop) {
console.log(o[prop]);
});
-
getOwnPropertyNames()
ECMAScript5以上才可使用
返回对象所有自有属性 包括不可枚举属性
17.getter和setter
对象的属性由名字
、值
和一组特性
构成。在ECMAScript5中,属性的值可以用一个或者两个方法代替,这两个方法就是getter
和setter
。用getter和setter定义的属性叫做存取器属性,他不同于数据属性,数据属性只有简单的值。
当程序查询存取器属性的值时,JS调用getter方法(无参数),这个方法的返回值就是属性存取表达式的值。当程序设置存取器属性的值的时候,JS调用setter方法,并将赋值表达式右侧的值当做参数传给setter方法。
如果属性同时具有getter和setter方法,那么它是可读写的,如果只有其中一个,那它就是只读/只写的。读取只写属性总返回undefined。
var p = {
x : 1,
y : 2,
// 使用get关键字 定义属性r的getter方法 不要忘记逗号
get r() {
return x + y;
},
// 使用get关键字 定义属性r的setter方法
set r(newValue) {
this.x = newValue/2 + x;
this.y = newValue/2 + y;
},
// q属性只读
get q() {
return x * y;
}
};
p.r;// 3