美文网首页
JS里的数据类型

JS里的数据类型

作者: 饥人谷_罗超 | 来源:发表于2018-12-15 10:14 被阅读10次

    JS里的数据类型主要分为两大类。

    1. 基本类型
    • 字符串(string)
    • 数字(number)
    • 布尔值(boolean)
    • null
    • undefined
    • 符号(symbol)
    1. 复杂类型
    • 对象(object)包括对象,数组,函数都属于对象。

    一共有七种,在这里介绍除了符号外的所有类型。

    字符串

    只要放在单引号或双引号中的字符就是字符串,在字符串内部如果要使用引号,就必须和外层引号不同,例如一下表示都是合法的。

    'key = "value"'
    "It's a long journey"
    

    另外也可以使用转义符。

    'Did she say \'Hello\'?'
    // "Did she say 'Hello'?"
    
    "Did she say \"Hello\"?"
    // "Did she say "Hello"?"
    

    如果要想多个单行字符串连接可用+号,这也是字符串换行连接的推荐方式。

    var longString = 'Long '
      + 'long '
      + 'long '
      + 'string';
    

    要表示特殊字符就需要使用转义符,主要使用的有一下几个。

    • \0 :null(\u0000)
    • \b :后退键(\u0008)
    • \f :换页符(\u000C)
    • \n :换行符(\u000A)
    • \r :回车键(\u000D)
    • \t :制表符(\u0009)
    • \v :垂直制表符(\u000B)
    • ' :单引号(\u0027)
    • " :双引号(\u0022)
    • \ :反斜杠(\u005C)
      其他类型要转换为字符串可以使用加空字符串的方法xxx + ''

    数字

    JS中所有数字都是用64位浮点数的形式存储的,所以在其底层并没有整数,只有小数。而浮点数的表示并不精确,会出现以下情况,需特别小心。

    0.1 + 0.2 === 0.3
    // false
    
    0.3 / 0.1
    // 2.9999999999999996
    
    (0.3 - 0.2) === (0.2 - 0.1)
    // false
    

    JS能够表示的数值范围为21024到2-1023(开区间),超出这个范围的数无法表示。在使用时,如果超出最大值,回发生‘正向溢出’。小于最小值时,会发生‘负向溢出’。

    Math.pow(2, 1024) // Infinity
    Math.pow(2, -1075) // 0
    

    JavaScript 提供Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值。

    Number.MAX_VALUE // 1.7976931348623157e+308
    Number.MIN_VALUE // 5e-324
    

    其他数据类型如果想转换为数字,可使用减零的方式xxx - 0(如果该数据可以转换为数字的话)。

    布尔值

    布尔值只有两个truefalse,在条件表达式中,会将表达式转换为布尔值,以进行下一步操作。除了以下六个falsy值外,其它一切转换为布尔值都为true

    • 数字0
    • NaN
    • null
    • undefined
    • 空字符串''
    • 布尔值false
      要将其它值转换为布尔值可使用双重取反!!xxx

    null和undefined

    这两个类型基本没什么区别,如果一个变量声明了而没有赋值,则会自动赋值为undefined。惯例来说,如果一个变量打算赋值为对象,而暂时还未赋值,则会先赋值为null
    另外,在转换为数字时,null会转换为0,而undefined则会转换为NaN

    对象

    对象包括普通对象,数组以及函数。

    var obj = {
      foo: 'Hello',
      bar: 'World'
    };
    var array = [1, 2, 3];
    function fun() {}
    

    对象的键名都是字符串,可以直接使用数字,JS会在后台自动转换为字符串。
    可以使用Object.keys(obj)查看对象的属性。使用delete操作符可以删除对象的属性,返回true。注意,删除一个不存在的属性,delete不报错,而且返回true

    var obj = { p: 1 };
    Object.keys(obj) // ["p"]
    
    delete obj.p // true
    obj.p // undefined
    Object.keys(obj) // []
    
    var obj = {};
    delete obj.p // true
    

    只有一种情况,delete命令会返回false,那就是该属性存在,且不得删除。
    in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false

    var obj = { p: 1 };
    'p' in obj // true
    'toString' in obj // true
    

    in运算符的一个问题是,它不能识别哪些属性是对象自身的,哪些属性是继承的。就像上面代码中,对象obj本身并没有toString属性,但是in运算符会返回true,因为这个属性是继承的。
    for...in循环可用来遍历对象属性(可枚举属性),包括继承的。JS内建属性和方法都不可枚举。

    var obj = {a: 1, b: 2, c: 3};
    
    for (var i in obj) {
      console.log('键名:', i);
      console.log('键值:', obj[i]);
    }
    // 键名: a
    // 键值: 1
    // 键名: b
    // 键值: 2
    // 键名: c
    // 键值: 3
    

    复杂类型和基本类型最大的区别就是在存储上面。基本类型的赋值都是使用拷贝,即改变赋值并不会影响另一个变量。而对象使用的是引用赋值,拷贝给声明的只是同一个内存地址,当改变了对象的内容,会影响另外的指向同一内存地址的变量。

    typeof

    使用typeof操作符检查变量类型。

    typeof 123 // "number"
    typeof '123' // "string"
    typeof false // "boolean"
    
    function f() {}
    typeof f // "function"
    typeof undefined // "undefined"
    typeof window // "object"
    typeof {} // "object"
    typeof [] // "object"
    typeof null // "object"
    typeof /([a-z])/ //"object"
    

    其中需要注意的是,普通对象,数组,null以及正则表达式都会返回"object"

    相关文章

      网友评论

          本文标题:JS里的数据类型

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