node.js依赖的 JavaScript基础 类型

文章标签: nodejs
2014-12-8 13:12:52     6 人阅读    

JavaScript类型可以简单地分为两组:基本类型和复杂类型。访问基本类型,访问的是 值,而访问复杂类型,访问的是对值的引用。
■基本类型包括number、boolean、string、null以及undefined。
■ 复杂类型包括array、function以及object。
如下述例子所示:


基本类型

 var a = 5; var b = a; b = 6;
结果为5 b; //结果为6

复杂类型
var a = ['hello1, 'world'];

 var b = a;

b [ 0] = ' bye ';


结果为“bye”

b[0]; // 结果“bye”
上述例子中的第二部分,b和a包含了对值的相同引用。因此,当通过b修改数组的第一个 兀素时,a相应的值也更改了,也就说3[0] === b[0]。
类型的困惑
要在JavaScript中准确无误地判断变量值的类型并非易事。
因为对于绝大部分基本类型来说,JavaScript与其他面向对象语言一样有相应的构造器, 比方说,你可以通过如下两种方式来创建一个字符串:
var a = 'woot';
var b = new String{1woot1);
a + b; // 'woot woot'
 然而,要是对这两个变量使用typeof和instanceof操作符,事情就变得有意思了:

typeof a;

 'string' typeof b;

 'object1 a instanceof String;

 false b instanceof String; II true
而事实上,这两个变量值绝对都是货真价实的字符串:
a.substr == b.substr; // true
并且使用==操作符判定时两者相等,而使用===操作符判定时并不相同:
a == b;  true a === b; II false
考虑到有此差异,我建议你始终通过直观的方式进行定义,避免使用new。
有一点很重要,在条件表达式中,一些特定的值会被判定为false: null、undefined、 还有0:
var a = 0; if (a) {
//这里始终不会被执行到
}
a == false; // true a === false; // false
另外值得注意的是,typeof不会把null识别为类型为null:
typeof null == 'object1; // 很不幸,结果为true
数组也不例外,就算是通过[]这种方式定义数组也是如此:
typeof [] == 'object1; // true
这里要感谢V8给我们提供了判定是否为数组类型的方式,能够让我们免于使用hack的方式。
在浏览器环境中,我们通常要查看对象内部的[[Class]]值:Object.prototype. toString.call([]) == '[object Array]'。该值是不可变的,有利于我们在不同的 上下文中(如浏览器窗口)对数组类型进行判定,而instanceof Array这种方式只适用于 与数组初始化在相同上下文中才有效。


原文地址:http://www.itmmd.com/201412/277.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

学习Flex书籍和资料整理和推荐   上一篇
下一篇  Spring mvc新手入门(9)-spring mvc + spring jdbc 查询功能详解

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!