数据类型
JavaScript的数据类型包括:
- Number
- String
- Boolean
- Symbol (ES6新增)
- Object
- Function
- Array
- Date
- RegExp (正则表达式)
- Null
- Undefined
1、Number
JavaScript并不区分浮点数和整数
内置对象Math用于处理更多的高级数学函数和常数
parseInt() 将字符串转为整型,该函数的第二个参数表示转化的数字的进制
parseInt("") // NaN
parseFloat() 将字符串转为浮点数,只用于解析十进制数字
Number() 可以将较多类型的输入转化为数字,具体规则参考《JavaScript高级程序设计》
Number(null) //0
Number(undefined) //NaN
单元运算符+也可以将字符串转化为数值 (注意与parseInt的区别)
+ "42" //42
+ "1.1" // 1.1
+ "1a" // NaN
parseInt("1a") // 1
NaN: 非数
NaN参与数学运算结果也是非数
NaN与任何值都不等
console.log(NaN === NaN) // false
内置函数 isNaN() 来判断一个变量是否是NaN
isNaN(NaN) // true
isNaN("time") // true
isNaN("10") // false, 可以转化为数字10
isNaN(true) // false, 可以转化为数字1
Infinity 和 -Infinity (正无穷和负无穷)
可以用内置函数 isFinite()来判断是否是有穷数
如果类型是 Infinity ,-Infinity, NaN 则为false。
2、String
ECMAScript中的字符串是不可变的,一旦创建,值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量
var lang = "Java";
lang = lang + "Script";
转化为字符串
Number、Boolean、Object和String都有一个toString()的方法
Null和Undefined没有这个方法
一般情况下toString()方法没有参数,有参数的时候表示数字的进制
var num = 10;
console.log(num.toString()); // 10
console.log(num.toString(2)); // 1010
转型函数String()可以将任意类型的值转化为String
- 如果有toString()方法调用toString()方法
- 如果是null返回"null"
- 如果是undefined返回"undefined"
3、Boolean
布尔值的字面量只有true和false,并不是数字值
转化为Boolean
使用转型函数Boolean()
数据类型 | 转换为true的值 | 转换为false的值 |
---|---|---|
Boolean | true | fasle |
String | 任何非空字符串 | “”(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0和NaN |
Object | 任何对象 | null |
Undefined | 无 | undefined |
4、Symbol
symbol是一种基本数据类型
每一个Symbol()返回的symbol值都是 唯一 的。一个symbol值能作为对象属性的标识符,这是该数据类型仅有的目的。
const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol('foo');
console.log(typeof symbol1); // "symbol"
console.log(symbol3.toString()); // "Symbol(foo)"
console.log(Symbol('foo') === Symbol('foo')); // false
Symbol("foo)不会强制字符串"foo"成为一个symbol类型,它每次都会创建一个新的symbol类型
Symbol()函数返回symbol类型的值,该类型具有静态属性和静态方法。它的静态属性会暴露几个内建的成员对象;它的静态方法会暴露全局的symbol注册,且类似于内建对象类,但作为构造函数来说它并不完整,因为它不支持语法 “new Symbol()”
5、Object
JavaScript中的对象实际上是一组数据和功能的集合。
var o = new Object(); //如果构造函数没有参数,()可以省略
方法
- constructor:
- hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在,propertyName必须以字符串形式指定
- isPropotypeOf(Object):用于检查传入的对象是否是传入对象的原型
- propertyIsEnmuerable(propertyName):用于检查给定的属性能否使用 for-in 语句来进行枚举
- toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区相对应
- toString():返回对象的字符串表示
- valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法返回值相同