你不知道的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操作符用来获取变量的值的类型。
相关文章推荐
- 你不知道的JavaScript(一)数据类型
- 你不知道的JavaScript(一)数据类型
- JavaScript中的数据类型知识总结(一定有你不知道的秘密~)
- 第一百零七节,JavaScript基本包装类型,数据类型的方法
- javascript的数据类型and隐式转换
- javascript的数据类型and隐式转换
- javascript数据类型
- JavaScript学习笔记第一天——基本数据类型(值类型)和引用类型
- JavaScript数据类型的检测
- javascript typeof返回的数据类型
- javascript数据类型
- JavaScript数据类型的一些注意点(3)
- javascript检测数据类型的5种方法
- JavaScript数据类型
- 【JavaScript】数据类型--廖雪峰JS教程【学习总结】
- javascript:第四章 数据类型显示和隐式的转换
- JavaScript--引用数据类型--objiect
- javascript的引用数据类型,javascript的运算符,逻辑运算符,javascript正则对象
- 谈JavaScript中的变量和数据类型
- javascript数据类型