美文网首页
JavaScript 数据类型

JavaScript 数据类型

作者: 指尖的宇宙 | 来源:发表于2018-06-06 16:49 被阅读0次

    JavaScript 数据类型

    编程语言都有内置的数据结构,但各种编程语言的数据结构常有不同之处。本文试图列出JavaScript语言中内置的数据结构。

    1.动态类型

    JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据

    var data = 42;    // data is a Number now
    var data = "JavaScript"; // data is a String now
    var data = true;  // data is a Boolean now
    

    2.数据类型详解

    首先,我们要明确一点JavaScript的数据类型即为值的数据类型。JavaScript中有7种数据类型(6种基本数据类型,1种引用类型)

    哪7种数据类型

    最新的 ECMAScript 标准定义了 7 种数据类型:

    • Boolean
    • Null
    • Undefined
    • Number
    • String
    • Symbol (ECMAScript 6 新定义)
    • Object

    基本类型详解

    • undefined 类型

    undefined型只有一个值,即特殊的undefined。使用var 或者 let 声明变量但未对其加以初始化时,这个变量的值就就是undefined。例如

      var a;
      console.log(a === undefined);// true
    
      let b;
      console.log(b === undefined);// true
    
    • null 类型

    null型也只有一个值,即null,使用typeof操作符检测返回object。如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其它值。这样只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。

    let a = null;
    console.log(typeof a); // "object"
    

    实际上,ECMAScript中,可以认为undefined值是派生自null值的,所以undefined==null但是undefined!==null(不推荐这样比较和使用)

    console.log(undefined==null);//true
    console.log(undefined===null);//false
    
    • boolean 类型

    boolean型只有两个字面值true,false。但是这两个值和数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

    要将一个值转为boolean型等价的值,有两种方案:

    一种是显式转换-调用类型转换函数Boolean()
    一种是自动转换-如if(value)中的value就会自动转化成为boolean值
    
    • number 类型

    number类型用来表示整型和浮点数字,还有一种特殊的数值(NaN- not a number,这个数值用于表示一个本来要返回数值的操作数未返回数值得情况-防止抛出错误)。

    比如在其它语言中数值÷0都会导致错误,停止运行,但是在JS中。0/0、NaN/0会返回NaN,其它数字/0会返回Infinity,不会报错。

    任何涉及与NaN的操作都会返回NaN,JS有一个isNaN()函数,可以判断接收的参数是否为NaN,或者参数转化为数字后是否为NaN

    console.log(NaN + 1); // NaN,任何涉及到NaN的操作都会返回NaN
    console.log(NaN === NaN); // false,NaN与任何值都不相等,包括NaN本身
    console.log(isNaN(NaN)); // true,是NaN
    console.log(isNaN('10')); // false,被转为数字10
    console.log(isNaN(true)); // false,被转为数字1
    console.log(isNaN(null)); // false,被转为数字0
    console.log(isNaN(undefined)); // true,返回NaN
    console.log(isNaN('hello')); // true,无法转换为数字
    console.log(0/0);// NaN,0/0返回NaN
    console.log(NaN/0);// NaN,NaN/0返回NaN
    console.log(1/0);// Infinity,其它数字/0返回Infinity
    console.log('1'/0);// Infinity,'1'成功转为数字
    console.log('1a'/0);// NaN,'1a'转为数字失败,变为NaN
    console.log(Infinity/0);// Infinity,其它数字/0返回Infinity
    
    
    • string 类型

    string类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由单引号(')或双引号(")表示。任何字符串的长度都可以通过访问其length属性取得。

    • symbol 类型

    ES5 的对象属性名都是字符串,这容易造成属性名的冲突。ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,这样就可以解决这个问题。Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。

      let s = Symbol();
      typeof s
      // "symbol"
    

    上面代码中,变量s就是一个独一无二的值。typeof运算符的结果,表明变量s是 Symbol 数据类型,而不是字符串之类的其他类型。

    注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。

    Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

      let s1 = Symbol('foo');
      let s2 = Symbol('bar');
    
      s1 // Symbol(foo)
      s2 // Symbol(bar)
    
      s1.toString() // "Symbol(foo)"
      s2.toString() // "Symbol(bar)"
    
    

    上面代码中,s1和s2是两个 Symbol 值。如果不加参数,它们在控制台的输出都是Symbol(),不利于区分。有了参数以后,就等于为它们加上了描述,输出的时候就能够分清,到底是哪一个值。

    • 引用数据类型
      复杂 类型即引用型,也就是我们常说的JS对象(包括普通的object型对象和function型对象)

    对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object的实例并为其添加属性和(或)方法,就可以创建自定义对象。如

      var o = new Object();//创建一个新的自定义对象{}
    

    也就是说,除去基本类型,剩余的就是引用型(包括内置对象,自定义对象等)都是基于Object进行拓展的

    更多有用成长信息请关注我的个人公众号:指尖的宇宙 您也可以搜索:supreme_mindest 找到我。

    用文字记录生命,践行终生成长。

    公众号二维码.jpg

    相关文章

      网友评论

          本文标题:JavaScript 数据类型

          本文链接:https://www.haomeiwen.com/subject/vgzbsftx.html