美文网首页
JS 核心知识整理-对象

JS 核心知识整理-对象

作者: 郝翔 | 来源:发表于2016-06-13 07:54 被阅读218次

    对象

    JavaScript 中,一般使用字面量的方法新建对象,表现形式为多个名值对。

    对象属性的不同

    有一个需要留意的地方,对象的属性名与变量名是不同的,属性名字可以是包括空字符串在内的任何字符串,举个例子:

    var obj = {
    first_name = 1,
    "first-name" = 2
    };
    

    回顾一下,在 js 中,标识符就是 _$a-Z开头后,选择性加上 0-9 的字符组合,标识符中是没有 -的,但是在对象的属性中,可以使用中划线 -,但是需要为属性名加引号。
    不过这样带来的问题也比较蛋疼,在 JS 中,只有两种方法可以读取属性,我们来看看:

    var a = { a-b: 1}
    // Uncaught SyntaxError: Unexpected token -
    var a = { "a-b": 1};
    a.a-b 
    // Uncaught ReferenceError: b is not defined(…)
    a."a-b"
    // Uncaught SyntaxError: Unexpected string
    a["a-b"]
    // 1
    

    只能说略有蛋疼...还是不要考虑这样的用法了,做个安静的美男子。
    总结起来,如果是属性值是标准的字符串字面量(反例是这种蛋疼的情况 a.012 ),同时是一个合法的标识符,那么可以使用 . 表示法检索,其他情况必须使用["key"]的方法检索。
    对象除了简单的检索外,还可以结合双目运算符,进行一些简单的操作,比如说赋默认值,规避 TypeError 等等。如下:

    var a = store["data"] || "pen";
    var a = filght.eq && flight.eq.model;
    

    增删查改

    • 通过赋值语句为对象赋值的时候,如果已经有了,那么会覆盖,如果没有,则会新建。
    • 对象按照引用进行传递,不会发生像基本类型一样的复制。
    • 所谓原型链在对象进行更新的时候,是不会被改变的,增改会发生在对象本身上,原型链只有在检索的时候才有用处。
    • delete方法用来删除对象本身存在的属性,不会影响原型链,这个运算符常常用来透现原型链上的属性。

    对象属性的检测

    使用 typeof 操作符,可以判断值的类型。如果需要单单检测属性,可以通过这个操作符来抛弃为 function的方法值。
    hasOwnProperty(keyName) 方法查看某个属性是否是对象独有的。
    for in方法同样可以用来判断属性的存在情况,它会枚举出包括在原型链上的所有属性,所以你懂的, 结合这几种方法才可以创造完美盛世。

    相关文章

      网友评论

          本文标题:JS 核心知识整理-对象

          本文链接:https://www.haomeiwen.com/subject/dmhydttx.html