JavaScript学习笔记02

2018-01-30  本文已影响11人  优雨

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块使用了returncontinuebreak语句跳出tryfinally块中的语句一定会在跳出前执行

如果finally抛出了异常 则该异常将代替正在处理的异常

如果finally运行到了return语句 就算try块抛出了异常 函数仍然会正常返回

13.创建对象的三种方式

属性名可以是标识符 也可以是字符串直接量(包括空字符串)

var point = {
    x : 1,
    y : 2
};
var book = {
    'title' : 'manga',
    'author' : 'ore'
};
var a = new Object();

第一个参数为原型 第二个参数可选

Object.create(Object.prototype);// 创建一个空对象 
Object.create(null);// 不提供原型 则创建的对象不继承任何东西 比如toString()方法

14.访问对象属性(两者都可以访问标识符或字符串直接量形式命名的属性)

例如 obj.x

属性名必须是标识符

例如 obj['x']

属性名必须是字符串(或者可以计算为字符串的表达式)

这种方式更加灵活 因为第一种方法属性名标识符是写死的 第二种则可以通过计算得到

15.检测某个对象是否有某个属性的方法

in运算符的左边是代表属性名的字符串,右侧是对象

当对象的自有属性或者继承属性包含这个属性 则返回true

var o = { x : 1};
'x' in o;// true
'toString' in o;// true
'y' in o;// false

这个方法只能检测对象是否包含这个自有属性 对于继承属性 它将返回false

var o = { x : 1};
x.hasOwnProperty('x');// true
x.hasOwnProperty('toString');// false toString是继承属性

这个是hasOwnProperty()方法的强化版 只有检测到自有属性是可枚举的才会返回true

某些内置的属性是不可枚举的 通常由JavaScript代码创建的属性都是可枚举的

Object.prototype.propertyIsEmurable('toString');// false 不可枚举

16.枚举属性

会返回对象所有的可枚举属性 包括继承属性

如果只需要自有属性,可以用hasOwnProperty()函数判断 或者用下面的Object.keys()方法

这个方法会返回一个包含传入对象的所有可枚举自有属性的数组对象

var o = {
    firstName : 'John',
    lastName : 'Smith',
    gender : 'male'
};
Object.keys(o).forEach(function (prop) {
    console.log(o[prop]);
});

返回对象所有自有属性 包括不可枚举属性

17.getter和setter

对象的属性由名字一组特性构成。在ECMAScript5中,属性的值可以用一个或者两个方法代替,这两个方法就是gettersetter。用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
上一篇 下一篇

猜你喜欢

热点阅读