视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript进阶系列—对象使用和属性
2020-11-27 20:25:32 责编:小采
文档

  • 对象作为数据类型

  • 访问属性

  • 删除属性

  • 属性名的语法

  • 对象使用和属性

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

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

    一个常见的误解是数字的字面值(literal)不能当作对象使用。这是因为 JavaScript 解析器的一个错误, 它试图将点操作符解析为浮点数字面值的一部分。

    2.toString(); // 出错:SyntaxError

    有很多变通方法可以让数字的字面值看起来像对象。

    2..toString(); // 第二个点号可以正常解析
    2 .toString(); // 注意点号前面的空格
    (2).toString(); // 2先被计

    对象作为数据类型

    JavaScript 的对象可以作为哈希表使用,主要用来保存命名的键与值的对应关系。

    使用对象的字面语法 - {} - 可以创建一个简单对象。这个新创建的对象从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

    两种语法是等价的,但是中括号操作符在下面两种情况下依然有效

  • 动态设置属性

  • 属性名不是一个有效的变量名(译者注:比如属性名中包含空格,或者属性名是 JS 的关键词)

  • 删除属性

    删除属性的唯一方法是使用 delete 操作符;设置属性为 undefined 或者 null 并不能真正的删除属性, 而仅仅是移除了属性和值的关联。

    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 - 只有 baz 被真正的删除了,所以从输出结果中消失。

    属性名的语法

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

    对象的属性名可以使用字符串或者普通字符声明。但是由于 JavaScript 解析器的另一个错误设计, 上面的第二种声明方式在 ECMAScript 5 之前会抛出SyntaxError 的错误。

    这个错误的原因是 delete 是 JavaScript 语言的一个关键词;因此为了在更低版本的 JavaScript 引擎下也能正常运行, 必须使用字符串字面值声明方式。

    下载本文
    显示全文
    专题