javaScript基本数据类型

我们知道JavaScript有ECMAScript、DOM、BOM三部分组成,下面一幅图可以简单明了的说明JavaScript的组成。


注:ECMAScript(European Computer Manufacturers Association)是由一种Ecma国际前身为欧洲计算机制造商协会制定的标准。简单来说,ECMAScript不是一门语言,而是一个标准。
ECMAScript中有5种简单数据类型,也称为基本数据类型:Undefined、Null、Boolean、String、Number。学习这些之前,需要先了解typeof操作符。
typeof的作用是判断给定数据的类型。具体用法见下面代码:

//1: typeof(直接量/变量)
console.log(typeof ("哈哈哈")); // string
console.log(typeof(13)); // number

// 2: typeof 直接量/变量
console.log(typeof "你好"); // string
console.log(typeof 23);  // number

一、Undefined类型

Undefined类型只有一个值undefined,如果一个变量只有声明,没有赋值,那它的结果就是undefined,页面上不会报错。
对于尚未声明的对象,只能执行一项操作,即使用typeof操作符检测其数据类型。

<script type="text/javascript">
    // 如果一个变量只有声明,没有赋值,那它的结果就是undefined,页面上不会报错
    var a;
    console.log(a); // undefined
    console.log(typeof a); // undefined

    var b
    console.log(typeof b); // undefined 
    </script>

结果表明:对未初始化和未声明的变量执行typeof操作都返回了undefined值。

二、Null类型

Null类型:空对象,也是只有一个值:null。从逻辑角度讲,null值表示一个空对象指针,而这也正是使用typeof操作符检测其类型返回"object"的原因。undefined是派生自null,所以,它们相等性测试结果返回true。它有一个很常用的用处:如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。

<script>
    console.log(typeof null); // object

    var a = null;
        if (a) {
            alert("true");
        } else {
            alert("false");
        }  // 返回false

        if (null == undefined) {
            console.log("undefined值是派生自null")
        }
</script>

三、Boolean类型

Boolean类型有两个字面值,分别是true、false。虽然它只有两个值,但是任何类型都可以转换成Boolean,数据类型及其转换规则如下图:



总结出来即是:除了false、""、NAN、0、Undefined、Null转换为Boolean的时候结果是false,其余都是true。

四、String类型

1、String:即字符串,简单来说就是用引号引起来的文本,可以是单引号,也可以是双引号。字符串长度用length表示。ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它的值就不能改变,如果改变了字符串,编译不会出现问题,但是内存会出现问题,特别影响性能。
要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,例如:
var str = "12"; str = str + "ab";

2、字符字面量:String类型包含一些特殊的字符字面量,也叫转义字符,比如\n表示换行、\b表示退格、\表示斜杠、'表示单引号、''表示双引号等。如果字符串中,包含双字节字符,length属性可能不会精确地返回字符串中的字符数目。

3、如果字符串中出现引号:

  • 如果字符串中出现双引号,可以把字符串的引号改成单引,反之,亦然
  • 使用转义符
<script>
        // 括号里面直接用的数据,叫做直接量
        alert("123");
        alert("1abv");
        alert('你好');
        // alert(abc); // 不是字符串,控制台会出现报错

        alert("我说:“你好”"); //不会出错
        // alert("you say:"today is a good day"");  // 会报错,可以改成如下
        alert('you say:"today is a good day"');

        alert("you say: \n \'hello\ \"world\" \b \"你好\"");
    </script>

五、Number类型

1、Number类型即是数值,分为浮点数值和整数数值,这里不再做过多说明,下面讲一下数值范围。
由于内存限制,ECMAScript并不能保存所有的数值类型,最小值保存在Number.MIN_VALUE,最大值保存Number_MAX_VALUE中,如果超过范围,会被自动转换成特殊的inFinity(正无穷)和-inFinity(负无穷)。可以用isFinite()函数来判断数值是否在最大值和最小值之间。

<script>
        console.log(isFinite(123)); // true
        var s = Number.MAX_VALUE + Number.MAX_VALUE;
        console.log(isFinite(s)); // false
        console.log(maxSum); // infinity(正无穷)

</script>

2、NaN
NaN(not a number)即非数值,是number的一种,用来表示数值的一种不正常的状态,一般情况下,会在数值计算错误的时候出现,它特殊到自己不等于自己。判断当前的数据是否是NaN的函数isNaN(),参数可以是任何数值,该函数可以帮确定这个参数是否“不是数值”,它在接到一个参数后,会尝试将这个值转换为数值,,函数返回false。某些不是数值的值会直接转换为数值,而不能被转换成数值的参数,会导致这个函数返回true。


<script>
         console.log(isNaN(NaN));   // true
         console.log(isNaN(10));    // false(10是一个数值)
         console.log(isNaN("10"));  // false(可以被转换成数值10)
         console.log(isNaN(true));  // false (可以被转换常数值1)
         console.log(isNaN(false)); // false(可以被转换成数值0)
         console.log(isNaN("你好")); // true(不能被转换成数值)
</script>

六、String、Number使用注意

  • 如果两个字符串用+相连,那加号的作用是连接这两个字符串
  • 如果两个数值用+相连,那么加号的作用是两个数值相加
  • 如果加号连接的两个直接量中有一个是字符串,那么作用就是连接
<script>
         console.log("我+sayHi"); // 我+nihai
         console.log("我"+"sayHi"); // 我nihai 

         var a = 123;
         var b = "123";
         console.log(a + a + a + b); // string "369123"
         console.log(b + a + a + a); // string "123123123123"
</script>

推荐阅读更多精彩内容