数据类型
数量类型概述
数据类型 | 实例/分类 |
---|---|
数值 | 整数、小数/基本数据类型 |
字符串 | 文本/基本数据类型 |
布尔 | true、false/ 基本数据类型 |
undefined | 未定义、不存在/ 特殊值 |
null | 空值 /特殊值 |
对象 | 狭义(object)、数组、函数 |
typeof 运算符
typeof
instanceof 运算符
Object.prototype.toString
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
typeof undefined // "undefined"
typeof null // "object"
typeof [] // "object"
typeof f // "function"
function f() {}
null 和 undefined
相等运算符(==)直接报告两者相等
null == number // true
在if语句中,它们都会被自动转为false
if (!null) { console.log(1) }
if (!undefined) { console.log(2)}
null 和 undefined 区别
null是一个表示“空”的对象,转为数值时为0
undefined是一个表示"此处无定义"的原始值,转为数值时为NaN
Number(undefined) // NaN
Number(null) // 0
布尔值
JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true
Boolean('') // false
Boolean(undefined) // false
Boolean(NaN) // false
Boolean(null) // false
Boolean(false) // false
Boolean(0) // false
整数和浮点数
JavaScript 内部,所有数字都是以64位浮点数形式储存,即使整数也是如此
if (1 === 1.0) {
console.log('1等于1.0')
}
// 1等于1.0
浮点数是不准确的,涉及小数的运算要小心。
0.1 + 0.2 === 0.3 // false
数值范围
Infinity 正向溢出 大于等于了2的1024次方
JavaScript 提供Number对象的MAX_VALUE和MIN_VALUE属性,返回可以表示的具体的最大值和最小值
Number.MAX_VALUE
Number.MIN_VALUE
几个特殊的数值
+0 -0
-0 === +0 // true
0 === -0 // true
0 === +0 // true
(-0).toString() // '0'
(+0).toString() // '0'
// 区别
(1 / +0) === (1 / -0) // false
1 / +0 // +Infinity
1 / -0 // -Infinity
NaN
NaN是 JavaScript 的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合
5 - 'x' // NaN
// 'x' 会在运算中的不到数值
0 / 0 //NaN
NaN 的数据类型
typeof NaN // "number"
NaN 不等于任何值,包括它本身
NaN === NaN // false
数组的indexOf方法内部使用的是严格相等运算符,所以该方法对NaN不成立
Boolean(NaN) // false
与数值相关的全局方法
parseInt()
parseInt 将字符串转为整数
parseInt('123') // 123
parseInt('') // NaN
如果字符串头部有空格,空格会被自动去除
parseInt(' 9') // 9
如果parseInt的参数不是字符串,则会先转为字符串再转换。
parseInt(1.23)
parseInt('1.23') // 1
字符串转为整数的时候,是一个个字符依次转换,如果遇到不能转为数字的字符,就不再进行下去,返回已经转好的部分
parseInt('9a') // 9
parseInt('a9') // NaN
parseInt 第二个参数表示进制的转换
parseFloat()
parseFloat方法用于将一个字符串转为浮点数。
如果字符串包含不能转为浮点数的字符,则不再进行往后转换,返回已经转好的部分。
parseFloat方法会自动过滤字符串前导的空格
parseFloat('314e-2') // 3.14
parseFloat('3.14more non-digit characters') // 3.14
parseFloat('\t\v\r12.34\n ') // 12.34
特别注意的点
如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN
空字符串会转化为NaN
parseFloat([]) // NaN
parseFloat('FF2') // NaN
parseFloat('') // NaN
后面总结注意 parseFloat 和 Number在转换中的区别
isNaN()
isNaN方法可以用来判断一个值是否为NaN
isNaN(NaN) // true
isNaN只对数值有效.如果传入其他值,会被先转成数值.
传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。
注意一点在做这个判断的时候,要注意 遵循的是Number()的转换规则
使用isNaN 最好做一个数据类型的判断
function myIsNaN(value) {
return typeof value === 'number' && isNaN(value);
}
判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。
function myIsNaN(value) {
return value !== value;
}
isFinite()
isFinite方法返回一个布尔值,表示某个值是否为正常的数值
除了Infinity、-Infinity、NaN和undefined这几个值会返回false,isFinite对于其他的数值都会返回true
字符串
字符串与数组
字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符
let s = 'hello'
s[0] // h
'hello'[1] // e
'hello'[-1] // undefined
只能读取,不可修改
Base64转码
javaScript 原生提供的两个方法
btoa() 任意值转为 Base64 编码
atob() Base64 编码转为原来的值
var str = 'Hello Word'
btoa(str) // "SGVsbG8gV29ybGQh"
atob("SGVsbG8gV29ybGQh") // 'Hello Word'
要将非 ASCII 码字符转为 Base64 编码,必须中间插入一个转码环节,再使用这两个方法
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}
function b64Decode(str) {
return decodeURIComponent(atob(str));
}
b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"