ECMAScriptJS高程3.基本概念(2)

1.ECMAScript数据类型

  5种简单数据类型,分别是:

    Undefined

    Null

    Boolean

    Number

    String

  1种复杂数据类型:

    Object

(1)typeof操作符——检测给定变量的数据类型

  “undefined”——未定义

  “boolean”——布尔值

  “string”——字符串

  “number”——数值

  “object”——对象可能null

  “function”——函数

eg:

1  <script type="text/javascript">
2     var m="hello!"
3     alert(typeof(m));
4     alert(typeof m);
5     alert(typeof 93);
6     </script>

并发3个指示框,分别是:

ECMAScript 1

ECMAScript 2

ECMAScript 3

只顾:(1)以上例子表达,typeof操作符的操作数可以是变量,也得以是数值字面量。

   typeof是一个操作符,而不是一个函数,所以例子中的圆括号可以行使,但不是必备的。

     (2)调用 typeof null再次回到的是
“Object”
,因为至极值null被认为是空的对象引用。

 

2.Undefined类型

ECMAScript,  undefined类型只有一个值,即特殊的undefined。使用var声明变量但尚未进展初叶化赋值时,这一个变量的值就是undefined。

  eg:

  

1 var message;
2 alert(message);

 

 

 

  结果图:

ECMAScript 4

  上边的例子只是阐明了变量message,但一贯不对其进展开首化。

 

注意:

  (1)未经初阶化的变量,其默认值为undefined,与没有举行定义的变量是不同等的。

eg:

1 var message;
2     alert(message);
3     alert(age);

其三行会出现错误:

ECMAScript 5

 

  

   运行以上代码,第一个警示框会显示变量message的值,即undefined。第二个警告框由于传递给alert()函数的是从未注脚的变量age,则会导致一个荒谬。

  对尚未阐明的变量,只好举行一项操作,尽管用typeof操作符检测其数据类型(对从未表明的变量调用delete不会造成错误,但是如此做没有实际意义,而且在严苛模式下会导致错误。)

  (2)使用alert()函数,输出的变量的值,已经定义阐明,不过并未举办初步化的变量的值为“undefined”,使用typeof操作符输出的变量的数据类型,已经定义注脚,可是没有进行初阶化的变量的数据类型也是“undefined”。

  (3)对没有定义的变量使用typeof操作符同样也是重返undefined。

  eg:

1 var message;
2     alert(typeof message);
3     alert(typeof age);

 

地方的代码会并发多少个警示框,都是显得“undefined”。

 

3.Null类型

  null类型的数目唯有一个值,就是null,null值表示一个空对象的指针,当用typeof操作符检测null时,会重回“object”。

eg:

1 var car=null;
2     alert(typeof(car));

 

 

ECMAScript 6

  倘诺定义的变量是准备来保存对象的,最好将该变量开首化为null而是不其他的值。实际上undefined值是派生自null值的,因而ECMA-262规定它们的相等性测试要回去true。

alert(null==undefined);

ECMAScript 7

 

    

注意:

  尽管null和undefined有如此的涉嫌,不过它们的用途是一点一滴不同的。大家知晓,在相似情状下,都并未必要把一个变量的值显式地安装为undefined,不过null却今非昔比,只大意在保留对象的变量还有真正保存对象,就相应明显地让该变量保存为null值。

  这样做不仅可以显示null作为空对象指针的规矩,也促进进一步区分null和undefined。

 

4.Boolean类型

  (1)该类型的值:true和false。(这六个值和数字值不是五遍事,由此true不一定等于1,false不必然等于0。)

  注意:Boolean类型的字面值是分别轻重缓急写的。

  (2)ECMAScript中装有体系的值都有与Boolean值等价的值。要将一个值转化为其相应的Boolean值,可以转移函数Boolean(),至于放回的值是true还是false,取决于要转换至的数据类型及其实际值。

注:各样数据类型及其相应的转换规则,详见高程P26.

 

5.Number类型

  (1)八进制字面值的首先位必须是0,当数字连串超越0~7时,前导0会被忽视,前面的数字将用作十进制数值解析。

    八进制子在严峻模式下无效的,会促成Javascript引擎抛出荒谬。

  (2)在拓展算术运算时,八进制和十六进制都会被转换成十进制数值。

  (3)浮点数:该数值中务必含有一个小数点,并且小数点前面总得至少有一位数字。

    注意:由于保存浮点数值需要的内存空间是保存整数的两倍,由此ECMAScript会不失时机地将浮点数转换为整数来保存。明显,如若小数点后并未另外数字,那一个数值可以当做整数来保存,要是浮点数值本身就是一个平头(eg:1.0),那么该值也会被撤换为整数。

  (4)默认情状下,ECMAScript会将小数点前边带有6个零上述的浮点数值转换为以e表示法表示的数值。

  (5)浮点数的万丈精度为17位小数,可是在进展统计时其精度远不如整数。

    eg:0.1+0.2的结果不是非常0.3,而是等于0.30000000000000004.

用代码测试情形如下:

 var
a=0.1,b=0.2;
    if(a+b==0.30000000000000004){
        alert(“You got 0.3”);
    }

结果:

ECMAScript 8

 

当代码为:

 var a=0.1,b=0.2;
    if(a+b==0.3){
        alert(“You got 0.3”);
    }

时,测试无法透过。

于是,一般不要测试某个特定的浮点数值。