JavaScript 数据类型

2017-05-24  本文已影响0人  shadow123

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

数据类型

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

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 标准参考教程)

上一篇下一篇

猜你喜欢

热点阅读