美文网首页
JavaScript的数据类型

JavaScript的数据类型

作者: Kevin丶CK | 来源:发表于2019-02-19 11:03 被阅读0次

    1、JavaScript 的数据类型,共有七种(ES6 新增了第七种 Symbol 类型的值

    1.1六种基本数据类型:

    1.布尔值(Boolean),有2个值分别是:true 和 false.
    2.null , 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或变体完全不同。
    3.undefined ,和 null 一样是一个特殊的关键字,undefined 表示变量未定义时的属性。
    4.数字(Number),整数或浮点数,例如: 42 或者 3.14159。
    5.字符串(String),字符串是一串表示文本值的字符序列,例如:"Howdy" 。
    6.代表(Symbol) ( 在 ECMAScript 6 中新添加的类型).。一种实例是唯一且不可改变的数据类型。

    注意undefined和null,一般将它们看成两个特殊值(后面会做详细介绍)。

    数值、字符串、布尔值这三种类型,合称为原始类型(primitive type)的值。是最基本的数据类型,不能再细分。
    1.2 对象(Object)

    对象则称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。对象是最复杂的数据类型,又可以分成三个子类型:
    狭义的对象(object)
    数组(array)
    函数(function)
    狭义的对象和数组是两种不同的数据组合方式,除非特别声明,一般而言“对象”都特指狭义的对象。函数其实是处理数据的方法,JavaScript 把它当成一种数据类型,可以赋值给变量,这为编程带来了很大的灵活性,也为 JavaScript 的“函数式编程”奠定了基础。

    2、Number.NaN 属性:

    NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

      console.log(typeof Number.NaN === 'number'); // true
    

    使用 isNaN() 来判断一个值是否是数字。原因是 NaN 与所有值都不相等,包括它自己。
    isNaN() 函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。

    3、特殊的null:

    null的类型,使用typeof时返回的是object,这是由于历史原因造成的。1995年的 JavaScript 语言第一版,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),没考虑null,只把它当作object的一种特殊值。

    原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判断为 object 类型,null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“object”。
    后来null独立出来,作为一种单独的数据类型,为了兼容以前的代码,typeof null返回object就没法改变了。

    console.log(typeof null);// object
    
    3.1 null与undefined

    都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。实际的区别是:null是一个表示“空”的对象,转为数值时为0;undefined是一个表示"此处无定义"的原始值,转为数值时为NaN。

    console.log(undefined == null);// true
    console.log(Number(null)); // 0
    console.log(Number(undefined)); // NaN
    console.log(5 + null);// 5
    console.log(5 + undefined)// NaN
    

    因此,我们可以这么理解:
    null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。
    undefined表示“未定义”,下面是返回undefined的典型场景。
    1.变量声明了,但没有赋值

    let i;
    console.log(i) // undefined
    

    2.调用函数时,应该提供的参数没有提供,该参数等于 undefined

     function f(x) {
            return x;
        }
      console.log(f());
    

    3.对象没有赋值的属性

     let json ={
           name: "张三",
            age: "19",
            address: "上海"
    };
    console.log(json.city)
    

    4.函数没有返回值时,默认返回 undefined

    function f() {}
     console.log(f()); // undefined
    

    注意:JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是1.除了下面六个值被转为false,其他值都视为true。undefined;null;false;0;NaN;""或''(空字符串)。
    2.空数组([])和空对象({})对应的布尔值,都是true。

    4、字面量 (Literals)

    字面量是由语法表达式定义的常量;或通过由一定字词组成的语词表达式定义的常量。
    在JavaScript中,你可以使用各种字面量。这些字面量是脚本中按字面意思给出的固定的值,而不是变量。字面量是常量,其值是固定的,而且在程序脚本运行中不可更改,比如false,3.1415 。

    4.1 数组字面量

    数组字面值是一个封闭在方括号对([])中的包含有零个或多个表达式的列表,其中每个表达式代表数组的一个元素。当你使用数组字面值创建一个数组时,该数组将会以指定的值作为其元素进行初始化,而其长度被设定为元素的个数。

    var arr = ["china", "japan", "Kona"];
    var a=[3];
    console.log(a.length); // 1
    console.log(a[0]); // 3
    
    4.2 布尔字面量

    布尔类型有两种字面量:true和false。
    不要混淆作为布尔对象的真和假与布尔类型的原始值true和false。布尔对象是原始布尔数据类型的一个包装器。

    4.3 整数字面量

    整数可以用十进制(基数为10)、十六进制(基数为16)、八进制(基数为8)以及二进制(基数为2)表示。

    十进制整数字面量由一串数字序列组成,且没有前缀0。
    八进制的整数以 0(或0O、0o)开头,只能包括数字0-7。
    十六进制整数以0x(或0X)开头,可以包含数字(0-9)和字母 a~f 或 A~F。
    二进制整数以0b(或0B)开头,只能包含数字0和1。
    严格模式下,八进制整数字面量必须以0o或0O开头,而不能以0开头。

    0, 117, -345 (十进制, 基数为10)
    015, 0001, -0o77 (八进制, 基数为8) 
    0x1123, 0x00111,  -0xF1A7 (十六进制, 基数为16或"hex")
    0b11, 0b0011,  -0b11 (二进制, 基数为2)
    
    4.4 浮点数字面量

    浮点数字面值可以有以下的组成部分:

    一个十进制整数,可以带正负号(即前缀“+”或“ - ”),
    小数点(“.”),
    小数部分(由一串十进制数表示),
    指数部分。
    指数部分以“e”或“E”开头,后面跟着一个整数,可以有正负号(即前缀“+”或“-”)。浮点数字面量至少有一位数字,而且必须带小数点或者“e”(大写“E”也可)。
    简言之,其语法是:
    [(+|-)][digits][.digits][(E|e)[(+|-)]digits]

    3.14      
    -.2345789 // -0.23456789
    -3.12e+12  // -3.12*1012
    .1e-23    // 0.1*10-23=10-24=1e-24
    
    4.5 对象字面量

    对象字面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的(元素)列表。你不能在一条语句的开头就使用对象字面值,这将导致错误或产生超出预料的行为, 因为此时左花括号({)会被认为是一个语句块的起始符号。

    4.6 RegExp 字面值

    一个正则表达式是字符被斜线(译注:正斜杠“/”)围成的表达式。下面是一个正则表达式文字的

    var re = /ab+c/;
    
    4.6 字符串字面量

    字符串字面量是由双引号(")对或单引号(')括起来的零个或多个字符。字符串被限定在同种引号之间;也即,必须是成对单引号或成对双引号。

    "foo"
    'bar'
    "1234"
    

    在ES2015中,还提供了一种模板字符串(template literals),模板字符串提供了一些语法糖来帮你构造字符串。这与Perl、Python还有其他语言中的字符串插值(string interpolation)的特性非常相似。除此之外,你可以在通过模板字符串前添加一个tag来自定义模板字符串的解析过程,这可以用来防止注入攻击,或者用来建立基于字符串的高级数据抽象。

    小Tips

    一、将字符串转换为数字的另一种方法是使用一元加法运算符。

    (-"1.1") + (-"1.1") =-2.2
    (+"1.1") + (+"1.1") = 2.2   
    // 注意:加入括号为清楚起见,不是必需的。
    

    二、类型转换
    javaScript是一种动态类型语言(dynamically typed language)。这意味着你在声明变量时可以不必指定数据类型,而数据类型会在代码执行时会根据需要自动转换。

    在包含的数字和字符串的表达式中使用加法运算符(+),JavaScript 会把数字转换成字符串。

    "37" + 7 // "377"
    

    在涉及其它运算符(译注:如下面的减号'-')时,JavaScript语言不会把数字变为字符串。

    "37" - 7 // 30
    

    相关文章

      网友评论

          本文标题:JavaScript的数据类型

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