zoukankan      html  css  js  c++  java
  • JavaScript中的对象(一)

    Email:longsu2010 at yeah dot net

    最近我和朋友谈起JavaScript中对象的问题。朋友以写JavaScript为生,而且生活的很好,然而我发现他并不真正懂这们语言的某些核心特征。如果你也有同样的困惑,我下面尝试解答。

    朋友引用了一本书中的解释,如下:
    “有趣的是ECMAScript的原始值(像boolean,number和string)是伪对象,那就是说他们是有属性和方法的。”
    真的很抱歉,他不是这样的。
    我们先看一个例子

    var a = 5;
    a.t = 3;
    alert(a.t);

    这个例子将会alert “undefined”。为什么呢?如果a是一个伪对象那么为什么没有保存属性呢?实际上a不是一个对象,甚至不是一个伪对象。它是原始的number。他没有属性。众多周知JavaScript自动将变量从一个类型转为另一个类型。看下面的代码片段:

    var b = "w" + a + [1, 2, 3];

    number a和array [1, 2, 3]将自动转为string。同样的事情发生在点(.)操作符之前,JavaScript简单的将左侧的操作数转为object。因此例子中的第二行会创建一个Number对象,它的值与a相等(本例中是5),然后为刚创建的Number对象的t属性赋值为3。但是新的Number对象不会取代变量a(不会回写给变量a),它只会被垃圾回收器回收掉。第三行会再一次创建一个新对象,之后尝试读取新对象的t属性,t属性是“undefined”。
    原始类型(boolean、number和string)不是对象,他们有可能像对象转换。转换规则是什么呢?JavaScript有六种内建类型:null、undefined、number、string、boolean和object。转换规则如下:
    1、如果是对象那么保持不变。
    2、如果是null或者undefined抛出异常。
    3、否则创建 (new Number(input)或者new String(input)或者new Boolean(input))。
    希望这边文章对于大家理解JavaScript对象有所帮助。下一篇将写原型。

    译者:
    var a = 2;
    var b = new Number(2);
    alert(a == b); // true
    alert(a === b); // false
    alert(a.valueOf()); // 2
    alert(b.valueOf()); // 2

    本文讲述了当对JavaScript内建的原始值进行点(.)操作时解析器的行为。如果你读过Nicholas C. Zakas的《JavaScript高级程序设计》你一定会记得其中对此有详细的解释。

    相关文章:

    你自认为理解了JavaScript?

    JavaScript交流贴

  • 相关阅读:
    UltraEdit 注册机使用说明
    sybase 收集常用sql语句
    过渡模式
    JavaScript 钩子
    自定义过渡的类名
    CSS过渡、CSS动画
    单元素/组件的过渡
    通过 v-once 创建低开销的静态组件
    内联模板、X-Template
    程序化的时间侦听器
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3184519.html
Copyright © 2011-2022 走看看