ECMAScript 规范地址:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdfjavascript
有过WEB前端开发经验的朋友都知道JavaScript是一种弱类型的语言,定义变量时无需指定变量类型,任一类型的值均可以赋值给该变量。正确的理解每一种数据类型,在适当的时候进行类型转换对咱们编程是颇有帮助的。html
例如咱们有一个多于两位的整数,抛开位数无论,咱们要获取从左到右数第二位数字,这时候將整数转换为string是比较方便的。前端
var num = 1234566;
var strNum = num + "";
alert(strNum[1]);//值为2
这样的例子不少,笔者不作过多介绍。JavaScript总共定义了七种内置类型,分别以下:java
接下来咱们使用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”呢?markdown
你可能不知道其实这是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操做符用来获取变量的值的类型。