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

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

  • 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”呢?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操做符用来获取变量的值的类型。

相关文章
相关标签/搜索