JS 里的数据类型

作者: 饥人谷_万青 | 来源:发表于2019-01-22 01:11 被阅读19次

    JavaScript中的每一个数据,都有它的类型。JS中一共有7种数据类型(包括ES6新增的symbol)。每一种数据类型所对应的数据分别是:

    1. number:整数跟小数(如11.23)。
    2. string:文本(如hello world)。
    3. boolean:表示两个状态,真(true)与假(false)。
    4. null:表示空值,及此处的值为空。
    5. undefinde:表示未定义或不存在。
    6. object:对象属于复杂数据类型。可以细分为:
      --狭义的对象(object
      --数组(array
      --函数(function
    7. symbol:表示独一无二的值。

    number

    JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此。容易造成混淆的是,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算。
    一个数在JS内部的保存形式为:
    (-1)^符号位 * 1.xx...xx(小数部分) * 2^指数部分
    第1位:

    • 0表示正数,1表示负数

    第2-12位:

    • 指数部分。指数部分共11位,意味着指数部分的最大值是2047。分出一半表示负数,JavaScript 能够表示的数值范围为2的1024次方到2的-1023次方(开区间)。

    第13-64位:

    • 小数部分(有效数字)。其中1不保存在JS之中,所以JS的有效数字长度位53位。这意味着,绝对值小于2的53次方的整数,都可以精确表示。

    string

    字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。

    • 在字符串中是用单引号,可以使用\转义字符
    • 将字符串分为多行书写,直接换行会报错。可以使用
      1 在行末加\
      2 使用+连接多个字符串
    • JavaScript 使用 Unicode 字符集。JavaScript 引擎内部,所有字符都用 Unicode 表示。
    • 每个字符在 JavaScript 内部都是以16位(即2个字节)的 UTF-16 格式储存。但JavaScript 对 UTF-16 的支持是不完整的,对于码点在U+10000到U+10FFFF之间的字符,JavaScript 总是认为它们是两个字符(length属性为2)。

    boolean

    boolean表示真与假两个状态,真用true表示,假用false表示。
    除了以下了六个falsy值的boolean值是false以外,其余的值在JS中都被视为true。
    -null
    -undefined
    -NaN //(Not a Number)
    -0
    -''"" //空字符串,需要注意空数组[]或空对象{}是true
    -false

    null和undefined

    nullundefined都可以表示“没有”,含义非常相似。在实际使用中也几乎没有区别。

    null表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入null,表示该参数为空。比如,某个函数接受引擎抛出的错误作为参数,如果运行过程中未出错,那么这个参数就会传入null,表示未发生错误。undefined表示“未定义”。

    • 在if语句中nullundefined都会转换成false
    • null转化为数字时,会变成0;undefined转为数字时,会变成NaN

    object

    简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

    1. 狭义的对象

    • 对象的所有键名都是字符串,加不加引号都可以。如果不加引号,则键名必须符合标识符的规范。
    • 对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”
    • 如果遇到如下这种情况,无法确定是对象还是代码块,一律解释为代码块。
    { foo: 123 }
    { console.log(123) } // 123  JS认为第一行是代码库
    //如果需要解释位对象,可以加上圆括号
    ({ foo: 123 }) 
    ({ console.log(123) }) // 报错  JS认为第一行是对象
    
    • 读取与赋值对象的属性,有两种方法,一种是使用点运算符,还有一种是使用方括号运算符。
    • 如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。数值键名只能使用方括号运算符。
    • 查看一个对象本身的所有属性,可以使用Object.keys方法。
    • delete命令用于删除对象的属性,删除成功后返回true。注意,即使删除的属性不存在,也会返回true。只有当属性 存在但不能删除时才会返回false

    2. 数组

    数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。

    • length属性的值就是等于最大的数字键加1。不是数字的键值对对length没有影响。
    • for...in不仅会遍历数组所有的数字键,还会遍历非数字键。

    3. 函数

    函数是一段可以反复调用的代码块。函数还能接受输入的参数,不同的参数会返回不同的值。typeof会返回function.

    • JavaScript 有三种声明函数的方法。
      1 function 命令
    function print(s) {
      console.log(s);
    }
    

    2 函数表达式

    var print = function(s) {
      console.log(s);
    };
    //此时S作为函数名只能在函数内部使用
    //结尾要加;
    

    3 Function 构造函数

    var add = new Function(
      'x',
      'y',
      'return x + y'
    );
    
    // 等同于
    function add(x, y) {
      return x + y;
    }
    // 最后一个参数才会被当作函数体,前面的都是参数。只有一个参数,该参数就是函数体。
    
    • 如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。
    • JavaScript 语言将函数看作一种值,与其它值(数值、字符串、布尔值等等)地位相同。由于函数与其他数据类型地位平等,所以在 JavaScript 语言中又称函数为第一等公民。
    • 函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域。
    • 没有办法只省略靠前的参数,而保留靠后的参数。如果一定要省略靠前的参数,只有显式传入undefined。
    • 如果有同名的参数,则取最后出现的那个值。
    • 在有多个参数的情况下,如果要获得第一个参数的值,可以使用arguments对象。arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。
    • 闭包就是函数,即能够读取其他函数内部变量的函数。
    • 闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。
    • JavaScript 引擎规定,如果function关键字出现在行首,一律解释成语句。如果要立即调用匿名函数,应该加上圆括号:
    // 语句
    function f() {}
    
    // 表达式
    var f = function f() {}
    ---------------------------------
    
    (function(){ /* code */ }());
    // 或者
    (function(){ /* code */ })();
    

    相关文章

      网友评论

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

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