JavaScript_笔记4 数据类型(Undefined,Null,Boolean,Number,String,Object)

ECMAScript的变量(Var操作符)

红宝书中讲到:ECMAScript的变量都是松散类型的。松散类型即可以用来保存任何类型的数据。也就是说,每个变量仅是一个用于保存值的占位符。
首先,如何用var定义/初始化一个变量:

var message;  // 定义了名叫message的变量,但未初始化
var message = 'hello'; // 定义了名叫message的变量,并保存了字符串'hello'

其次,var操作符定义的变量是局部变量

<script>
      function test() {
    
    
          var message = 'hi';
      }
      test(); //调用函数,创建变量message并赋值
      alert(message); //超出了message的作用域,出错
      //message相当于未声明的变量,只能执行typeof操作
</script>

总结:

  1. var可以定义一个变量,该变量可以保存任何值,只是一个用于保存值的占位符
  2. 不初始化的话,该变量将保存一个为undefined的值;
  3. 对变量初始化,该变量将保存一个特定的值,但不会因为是某个值就将其标记为某某类型。(如var message=‘hello’;并不会因为message保存了字符串值‘hello’,message就被标记成字符串类型)
  4. 初始化变量的过程,可以理解作:只是给一个变量赋值;
  5. var操作符定义的变量是局部变量。

ECMAScript的数据类型

ECMAScript 有5种简单数据类型(基本数据类型),即为:Undefined、Null、Boolean、Number和String;有一种复杂数据类型,Object。

typeof操作符

typeof操作符会返回以下某个字符串:

  1. undefined (若未定义或未初始化)
  2. boolean (若变量的值是布尔值)
  3. string (若变量的值是字符串)
  4. number (若变量的值是数值)
  5. object (若变量的值是对象或null)
  6. function (若变量的值是函数)

验证返回undefined的情况
1.1未初始化的情况
test函数中定义了变量message,但未初始化;

    <script>
        function test() {
    
    
            var message;
            // var message = 'hello';
            // var message = true;
            // var message = 100;
            // var message = window;
            // var message = null;
            alert(typeof message);
        }
        test();
        // var message = test;
        // alert(typeof message);
    </script>

未初始化,则返回字符串undefined。前文说过:定义一个变量,但不初始化的话,该变量保存一个特殊的值undefined;
在这里插入图片描述
1.2未定义的情况
函数test执行后,var操作符定义了变量message,并对它初始化,保存字符串值‘hello’。

    <script>
        function test() {
    
    
            // var message;
            var message = 'hello';
            // var message = true;
            // var message = 100;
            // var message = window;
            // var message = null;
            // alert(typeof message);
        }
        test();
        // var message = test;
        alert(typeof message);
    </script>

同样也会是undefined。既可以说明var操作符定义的变量是局部变量,也可以说明未定义的变量,使用typeof将返回字符串undefined;
还有一点:未声明的变量只能执行typeof操作
剩下的可以自己动手佐证;
另外特别说明:null是空对象指针,所以typeof返回的是字符串’object’。将在下文进一步阐述。

类型①—Undefined类型

Undefined类型只有一个值——undefined。
若用var操作符声明一个变量,未对其初始化的话,该变量保存的值就是undefined。

        var age ;
        alert(age); // 分别执行,age未初始化保存的值是undefined
        alert(age == undefined); // 分别执行,返回 true
        alert(typeof age) // 返回字符串'undefined'
  		alert(age); // 分别执行,出错
        alert(age == undefined); // 分别执行,出错
        alert(typeof age); // 分别执行,返回字符串'undefined'

总结:

  1. var声明但未初始化的变量,将保存值为undefined;
  2. 声明但未初始化的变量,typeof将返回字符串’undefined‘;
  3. 未声明的变量,只能执行typeof操作;
  4. 未声明的变量,执行typeof操作也是返回字符串’undefined‘;

类型②—Null类型

Null类型只保存一个特殊的值,null;
null值有两个特点:

  1. 对null值执行typeof将返回’object’,因为null是空对象指针
  2. null == undefined ,将返回true

只要意在保存对象的变量还没有真正地保存对象,就有必要明确地让该变量保存null值。

类型③—Boolean类型

Boolean类型小结:

  1. Boolean类型有两个字面值,true和false
  2. 此字面值是区分大小写的,例如True和False都不是Boolean的值。
  3. ECMAScript所有类型的值都有与Boolean值等价的值,即可以用转型函数Boolean()去转化。

对任何数据类型的值使用Boolean()函数,都会返回一个Boolean值。至于这个Boolean值是true还是false,取决于该值的数据类型及其实际的值。下面是转型函数Boolean()的转换规则:

  1. Undefined类型,值只为undefined,转换为false
  2. Boolean类型,值为true则转换为true,值为false转换为false
  3. Number类型,值为任何非零数字值转为true,NaN和0转为false
  4. String类型,值为任何非空字符串转为true,空字符串转为false
  5. Object类型,值为任何对象转为true,值为null转为false

因此,有个易混淆的说法,true一定是1,false一定是0。其实不对。
应该是,1一定是true,0一定是false;true不一定是1,false也不一定是0;

类型④—Number类型

1.永远不要测试某个特定的浮点数值

ECMAScript的浮点数值最高精度是17位小数,但在进行算数计算时,其精确度远远不如整数。
例如:0.1+0.2的结果并不是0.3,是0.30000000000000004。所以永远没法通过测试

if(a+b==0.3){
    
    
	alert('the result is 0.3')
}

永远不要测试某个特定的浮点数值,因为你不知道是多小的舍入误差导致结果有偏差。

2.正无穷Infinity & 负无穷-Infinity

若某次计算的结果得到一个超出数值范围的值,这个数值会自动转为特殊的Infinity值。若是负数,则转为-Infinity(负无穷);若是正数,则转为Infinity(正无穷)。

  1. Infinity和-Inifinity不是能够参与计算的数值
  2. 可以用isFinite()函数判断参数是否为有穷的。如果参数在最小和最大数值之间,isFinite()将返回true,否则返回false

3.NaN(Not a Number)

NaN非数值,是一个特殊的数值。用于表示一个本来要返回数值的操作数但却没有返回数值的情况,这样就可以不用抛出错误。
如,在其它语言中,任何数值除以非数值会出现错误。但在ECMAScript中,它会返回NaN,而不是抛出错误。

alert(NaN/10; //NaN
alert(NaN==0; //false
alert(NaN==NaN;//false
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false 10是数值
alert(isNaN('10')); //false 可以转成数值
alert(isNaN(true)); //false 可以转成数值
alert(isNaN('blue')); //true 不可以转成数值

对NaN进行总结:

  1. 任何涉及到NaN的操作都是返回NaN
  2. NaN与任何数值都不等,包括NaN自身
  3. isNaN()函数可以判断参数是否“不是数值”。该函数可以接受任何类型的参数。先尝试能否转换为数值,可以的话就返回false,不可以就返回true,表面是NaN。

猜你喜欢

转载自blog.csdn.net/qq_43263320/article/details/112686443