JavaScript面向对象的支持(下)
2010-09-14 13:37:33 来源:WEB开发网我们注意到,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.
Tags:JavaScript 面向 对象
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接