您的位置:首页 > Web前端 > JavaScript

你不知道的JavaScript(一)数据类型

2015-05-15 19:00 393 查看


有过WEB前端开发经验的朋友都知道JavaScript是一种弱类型的语言,定义变量时无需指定变量类型,任一类型的值都可以赋值给该变量。正确的理解每一种数据类型,在适当的时候进行类型转换对我们编程是很有帮助的。

例如我们有一个多于两位的整数,抛开位数不管,我们要获取从左到右数第二位数字,这时候將整数转换为string是比较方便的。

var num = 1234566;
var strNum = num + "";
alert(strNum[1]);//值为2


这样的例子很多,笔者不做过多介绍。JavaScript总共定义了七种内置类型,分别如下:

null

undefined

boolean

number

string

object

symbol—ECMAScript 6.0规范新增

接下来我们使用typeof操作符,来检查给定的值属于哪种类型,typeof操作符会返回该值的类型字符串。

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>exam_2</title>
</head>
<body>
<div>
<script type="text/javascript">
document.writeln(typeof "hello world!");
document.writeln("<br/>");
document.writeln(typeof 123.1);
document.writeln("<br/>");
document.writeln(typeof Symbol());
document.writeln("<br/>");
document.writeln(typeof [1,2,3]);
document.writeln("<br/>");
document.writeln(typeof {name:"Rongbo_J",age:23});
document.writeln("<br/>");
document.writeln(typeof /^[1-9]$/);
document.writeln("<br/>");
document.writeln(typeof true);
document.writeln("<br/>");
document.writeln(typeof undefined);
document.writeln("<br/>");
</script>
</div>
</body>
</html>


在浏览器中运行可以看到输出的类型字符串:



JS中的字符串属于string类型,数值(不区分整数和浮点数)都属于number类型,symbol类型为ECMAScript6.0规范新增,通过Symbol()调用产生。数组、对象、正则表达式都属于object类型,ture/false两个值属于boolean类型。undefined表示变量值未指定或变量未声明,单独属于一个类型undefined。

此外这里有一些特例:

document.writeln(typeof null);//输出object


null和undefined类似,一个值作为一个类型,我们使用typeof null 应该返回”null”字符串才对,那这里为什么会返回”object”呢?

你可能不知道其实这是JavaScript最初设计上的一个Bug,有很多已经存在的WEB系统都使用类似下面的代码来检测null值:

var a = null;
if(!a && typeof a == "object"){};


如果修复了这个bug,将会导致现存的WEB系统出现更多的Bug,所以这个bug一直持续了近20年,而且以后也不可能会修复。

再来看一个例子:

var func = function(){

};
document.writeln(typeof func);//页面输出function
document.writeln("<br/>");


这里我们定义一个函数,使用typeof操作符获取类型字符串,页面输出function。读者可能很容易认为function也是JS顶层的内置类型。实际上ECMAScript规范中提到,function类型属于object的”子类型”。

为了证明这个结论,我们可以这样写代码:

<script type="text/javascript">
alert(function(){}.length);
</script>


可以看到,语法上没有任何问题:



最后再来谈谈typeof操作符,下面这段代码再常见不过了:

var a = 20;
typeof a;


一些书籍中说typeof操作符用来获取变量的类型,其实这种说法不是很准确,JavaScript的变量是没有类型这个概念的,类型是和变量的值相关的。

上面的代码实际上等价于:

typeof 20;


准确的描述应该是:typeof操作符用来获取变量的值的类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: