3.3变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。
3.4 数据类型
由于ECMAScript的变量是松散类型,可以用typeof来检测给定变量的数据类型。typeof是一个操作符而不是函数。
- undefined
- boolen
- string
- number
- object(null也是返回这个)
- function
null值表示一个空指针,undefined值是派生自null值的
console.log(null == undefined ) \\true
console.log(null === undefined ) \\false
可用Boolean()
来转换对应的Boolean值
3.4.5 Number类型
- 八进制:第一位必须是0,其余是0-7;
- 十六进制:前两位是0X(0x),后面0-9或者A-F(可小写)
在八进制中,如果字面量的数值超出了范围,那么前面0会被忽略,后面的数值当作十进制解析。
var Num = 019 \\ 19
保存浮点数值需要的内存空间是保存整数值的两倍
Infinity 表示无穷,+Infinity正无穷,-Infinity负无穷
如果某次计算返回了Infinity,那么该值无法继续参与下一次的计算。 用isFinite()
可以判断一个数值是不是无穷
0除以0都等于NaN
console.log(0/0) // NaN
console.log(1/0) // Infinity
console.log(-1/0) // -Infinity
复制代码
NaN == NaN //false
isNaN()
可以判断是否‘不是数值’,它会把传入的参数尝试转换成数值,可以被转换,返回false,不能被转换,返回true
console.log(isNaN(NaN)) // true
console.log(isNaN(10)) // false
console.log(isNaN("10")) // false
console.log(isNaN("blue")) // true
console.log(isNaN(true)) // false,可以被转换成数值1
复制代码
Number()可以把任何数据类型转换成数值
转换规则:
- 如果是Boolean,true和false分别返回1和0;
- 如果是数字,返回该数字
- 如果是null,返回0,
- 如果是undefined,返回NaN
- 如果是字符串
- 如果字符串只包含数字,转成十进制的数值
- 如果字符串包含有效的浮点,转换成对应的浮点数值
- 如果字符串包含有效的十六进制格式,转成相同大小的十进制数值
- 字符串为空,返回0
- 如果包含是除上述外的其他格式,返回NaN
- 如果是对象,则调用对象的
valueOf()
方法,然后按照前面的规则转换。如果转换的结果是NaN,则调用的对象的toString()
方法,再按照前面的规则转换
由于Number()函数在转换字符串时复杂且不够合理,因此在处理 整数 的时候更常用parseInt()
parseInt()
- 会忽略前面的空格,直到找到第一个非空格字符
- 如果第一个字符不是数字或者负号,会返回NaN
- 如果第一个字符是数字,会继续解析下一个字符,直到解析完或者遇到非数字字符
- 能识别十进制、八进制、十六进制
console.log(parseInt()) // NaN
console.log(parseInt("1234blue")) //1234
console.log(parseInt("0xA")) //10,十六进制
console.log(parseInt("22.5")) //22,小数点不是有效的数字字符
console.log(parseInt("070")) //56,八进制
复制代码
因为在ECMAScript3 JavaScript 引擎中,“070”被当成八进制字面量,而在ECMAScript5 JavaScript 引擎中,parseInt不再有解析八进制的能力,“070”被转换成70。因此,parseInt有第二个参数,使用的基数
console.log(parseInt("AF")) //NaN
console.log(parseInt("AF",16)) //175
console.log(parseInt("070",8)) //56
console.log(parseInt("070")) //70
复制代码
parseFloat()
- 只解析十进制,没有第二个参数
- 十六进制字符串会返回0
- 会忽略前面的0
console.log(parseFloat("1234blue")) //1234
console.log(parseFloat("0xA")) // 0
console.log(parseFloat("22.5")) // 22.5
console.log(parseFloat("22.34.5")) //22.34
console.log(parseFloat("0980.5")) //980.5
console.log(parseFloat("3.125e7")) //31250000
复制代码
3.4.6 string类型
toString()
方法可以把一个值转换成一个字符串,null和undefined没有这个方法,里面可以传递参数,表示输出数值的基数(几进制)
在不知道要转换的值是不是null和undefined时,可以用转型函数String()
,能够将任何类型的值转换成字符串
- 如果值有toSting()方法,则调用该方法(没有参数)返回结果
- 如是null,返回"null",如是undefined,返回"undefined"
3.4.7 Object类型
Object每个实例都有下列属性和方法
- constructor
- hasOwnProperty(propertyName)
- isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
function object1() {}
const object3 = new object1();
console.log(object1.prototype.isPrototypeOf(object3));
// expected output: true
复制代码
- propertyIsEnumerable(propertyName) : 用于检查给定的属性是否能够使用for-in语句类枚举
- toLocalString() : 用于日期对象,跟根据当地或者指定参数返回该地区的日期格式
- toString()
- valueOf() 返回对象的原始值
var timestamp = (new Date()).valueOf() //返回时间戳
转载于:https://juejin.im/post/5cf2256df265da1bbd4b5ca4