美文网首页
JavaScript 数据类型

JavaScript 数据类型

作者: shadow123 | 来源:发表于2017-05-24 18:43 被阅读0次

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

    数据类型

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

    • 6种基本类型:
      • 数值(number)
      • 字符串(string)
      • 布尔值(boolean)
      • undefined
      • null
      • Symbol
    • 和对象(object)

    typeof运算符

    typeof运算符可以返回一个值的数据类型,返回一个字符串。

    数值

    根据 ECMAScript 标准,JavaScript 中只有一种数值类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-( $2^{63}$ -1) 到 $2^{63}$ -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。

    在JavaScript语言的底层,根本没有整数,所有数字都是小数(64位浮点数)。

    1 === 1.0 // true
    

    由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。

    0.1 + 0.2 === 0.3
    // false
    0.1 + 0.2
    // 0.30000000000000004
    

    数值的进制

    JavaScript对整数提供四种进制的表示方法:十进制、十六进制、八进制、2进制。

    十进制:没有前导0的数值
    八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的七个阿拉伯数字的数值。
    十六进制:有前缀0x或0X的数值。?
    二进制:有前缀0b或0B的数值。

    NaN

    NaN是JavaScript的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。

    typeof NaN // 'number'
    

    运算规则

    NaN不等于任何值,包括它本身。

    NaN === NaN  // false
    

    字符串

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

    'abc'
    "abc"
    

    如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。

    var longString = "Long \
    long \
    long \
    string";
    
    longString
    // "Long long long string"
    

    转义

    反斜杠(\)在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。

    \0 null(\u0000)
    \b 后退键(\u0008)
    \f 换页符(\u000C)
    \n 换行符(\u000A)
    \r 回车键(\u000D)
    \t 制表符(\u0009)
    \v 垂直制表符(\u000B)
    ' 单引号(\u0027)
    " 双引号(\u0022)
    \ 反斜杠(\u005C)

    反斜杠还有三种特殊用法。

    (1)\HHH

    反斜杠后面紧跟三个八进制数(000到377),代表一个字符。HHH对应该字符的Unicode码点,比如\251表示版权符号。显然,这种方法只能输出256种字符。

    (2)\xHH

    \x后面紧跟两个十六进制数(00到FF),代表一个字符。HH对应该字符的Unicode码点,比如\xA9表示版权符号。这种方法也只能输出256种字符。

    (3)\uXXXX

    \u后面紧跟四个十六进制数(0000到FFFF),代表一个字符。HHHH对应该字符的Unicode码点,比如\u00A9表示版权符号。

    Base64转码

    Base64是一种编码方法,可以将任意字符转成可打印字符。

    JavaScript原生提供两个Base64相关方法。

    btoa():字符串或二进制值转为Base64编码
    atob():Base64编码转为原来的编码

    var string = 'Hello World!';
    btoa(string) // "SGVsbG8gV29ybGQh"
    atob('SGVsbG8gV29ybGQh') // "Hello World!"
    

    要将非ASCII码字符转为Base64编码,必须中间插入一个转码环节,再使用这两个方法。

    function b64Encode(str) {
      return btoa(encodeURIComponent(str));
    }
    
    function b64Decode(str) {
      return decodeURIComponent(atob(str));
    }
    
    b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
    b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"
    

    布尔值

    布尔值只有两个值:true和false。

    除了下面六个值被转为false,其他值都视为true。

    undefined
    null
    false
    0
    NaN
    ""或''(空字符串)

    null和undefined

    null与undefined都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。

    null的特殊之处在于,JavaScript把它包含在对象类型(object)之中。

    typeof null // "object"
    

    注意,JavaScript的标识名区分大小写,所以undefined和null不同于Undefined和Null(或者其他仅仅大小写不同的词形),后者只是普通的变量名。

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

    undefined表示“未定义”。

    Symbol

    Symbol 是JavaScript的原始数据类型,Symbol实例是唯一且不可改变的.

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

    Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述。注意,Symbol函数的参数只是表示对当前 Symbol 值的描述,因此相同参数的Symbol函数的返回值是不相等的。

    // 没有参数的情况
    var s1 = Symbol();
    var s2 = Symbol();
    
    s1 === s2 // false
    
    // 有参数的情况
    var s1 = Symbol('foo');
    var s2 = Symbol('foo');
    
    s1 === s2 // false
    

    对象

    对象(object)是JavaScript的核心概念,也是最重要的数据类型。JavaScript的所有数据都可以被视为对象。
    所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。

    var o = {
      p: 'Hello World'
    };
    

    p是“键名”,字符串Hello World是“键值”,键名与键值之间用冒号分隔。

    对象的所有键名都是字符串。对象的每一个“键名”又称为“属性”(property),它的“键值”可以是任何数据类型。

    检查变量是否声明

    if ('a' in window) {
      // 变量 a 声明过
    } else {
      // 变量 a 未声明
    }
    

    查看所有属性

    查看一个对象本身的所有属性,可以使用Object.keys方法。

    var o = {
      key1: 1,
      key2: 2
    };
    
    Object.keys(o);
    // ['key1', 'key2']
    

    (摘自 JavaScript 标准参考教程)

    相关文章

      网友评论

          本文标题:JavaScript 数据类型

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