WEB开发网
开发学院网页设计JavaScript JavaScript面向对象的支持(下) 阅读

JavaScript面向对象的支持(下)

 2010-09-14 13:37:33 来源:WEB开发网   
核心提示: 我们注意到,A1和A2的构造器都指向Number.这意味着通过constructor属性来识别对象,(有时)比typeof更加有效.因为"值类型数据"A1作为一个对象来看待时,与A2有完全相同的特性.--除了与实例引用有关的问题.参考JScript手册,我们对其它基础类

我们注意到,A1和A2的构造器都指向Number.这意味着通过constructor属性来识别对象,(有时)比typeof更加有效.因为"值类型数据"A1作为一个对象来看待时,与A2有完全相同的特性.

--除了与实例引用有关的问题.

参考JScript手册,我们对其它基础类型和构造器做相同考察,可以发现:

- 基础类型中的undefined、number、boolean和string,是“值类型”变量

- 基础类型中的array、function和object,是“引用类型”变量

- 使用new()方法构造出对象,是“引用类型”变量下面的代码说明“值类型”与“引用类型”之间的区别:

// 关于JavaScript类型系统中的值/引用问题

  var str1 = 'abcdefgh', str2 = 'abcdefgh';
  var obj1 = new String('abcdefgh'), obj2 = new String('abcdefgh');document.writeln([str1==str2, str1===str2], '<br>');
document.writeln([obj1==obj2, obj1===obj2]);

测试代码的执行结果如下:

-----------
true, true
false, false
-----------

我们看到,无论是等值运算(==),还是全等运算(===),对"对象"和"值"的理解都是不一样的.

更进一步的理解这种现象,我们知道:

- 运算结果为值类型,或变量为值类型时,等值(或全等)比较可以得到预想结果 - (即使包含相同的数据,)不同的对象实例之间是不等值(或全等)的 - 同一个对象的不同引用之间,是等值(==)且全等(===)的但对于String类型,有一点补充:根据JScript的描述,两个字符串比较时,只要有一个是值类型,则按值比较.这意味着在上面的例子中,代码"str1==obj1"会得到结果true.而全等(===)运算需要检测变量类型的一致性,因此"str1===obj1"的结果返回false.

上一页  1 2 3 4 5 6 7  下一页

Tags:JavaScript 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接