JS数据类型

405 阅读4分钟

数据类型概述

  1. 最新的 ECMAScript 标准定义了 8 种数据类型:

    7 种原始类型:Boolean, Null, Undefined, Number, BigInt, String, Symbol 和 Object。

  2. 原始值( primitive values )

    除 Object 以外的所有类型都是不可变的(值本身无法被改变)。例如,与 C 语言不同,JavaScript 中字符串是不可变的(译注:如,JavaScript 中对字符串的操作一定返回了一个新字符串,原始字符串并没有被改变)。我们称这些类型的值为“原始值”。

  • 数值(number):整数和小数(比如1和3.14)

  • 字符串(string):文本(比如Hello World)。

  • 布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)

  • undefined:表示“未定义”或不存在,即由于目前没有定义,所以此处暂时没有任何值

  • null:表示空值,即此处的值为空。

  • Symbol:符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值

  • BigInt:BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。

  • 对象(object):各种值组成的集合。

主要数据类型分析

1. null与undefined

都可以表示“没有”,含义非常相似。将一个变量赋值为undefined或null,老实说,语法效果几乎没区别。 对于null和undefined,大致可以像下面这样理解。

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

undefined表示“未定义”,下面是返回undefined的典型场景。

// 变量声明了,但没有赋值
var i;
i // undefined

// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
  return x;
}
f() // undefined

// 对象没有赋值的属性
var  o = new Object();
o.p // undefined

// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined

2. 布尔值

  • 布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。

  • 下列运算符会返回布尔值:

    前置逻辑运算符: ! (Not)

    相等运算符:===,!==,==,!=

    比较运算符:>,>=,<,<=

  • 如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。

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

  • 布尔值往往用于程序流程的控制,请看一个例子。

    if ('') {
      console.log('true');
    }
    // 没有任何输出
    

    上面代码中,if命令后面的判断条件,预期应该是一个布尔值,所以 JavaScript 自动将空字符串,转为布尔值false,导致程序不会进入代码块,所以没有任何输出。

  • 注意,空数组([])和空对象({})对应的布尔值,都是true。

    if ([]) {
      console.log('true');
    }
    // true
    
    if ({}) {
      console.log('true');
    }
    // true
    

3. 字符串

  • 字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
    'abc'
    "abc"
    
  • 单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
    'key = "value"'
    "It's a long journey"
    
    上面两个都是合法的字符串。

转义

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

  • 需要用反斜杠转义的特殊字符,主要有下面这些。

	\0null(\u0000)
	
	\b :后退键(\u0008)
	
	\f :换页符(\u000C)
	
	\n :换行符(\u000A)
	
	\r :回车键(\u000D)
	
	\t :制表符(\u0009)
	
	\v :垂直制表符(\u000B)
	
	\' :单引号(\u0027)
	
	\" :双引号(\u0022)
	
	\\ :反斜杠(\u005C)
	
	上面这些字符前面加上反斜杠,都表示特殊含义。

其他的数据类型暂时不说了,说点其他的吧,对象需要单独写

数值的进制

使用字面量(literal)直接表示一个数值时,JavaScript 对整数提供四种进制的表示方法:十进制、十六进制、八进制、二进制。

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