目录
数据类型
Number类型
1.值的范围
ECMAScript可表示的最小数值:Number.MIN_VALUE (多数浏览器中表示5e-324),可表示的最大数值:Number.MAX_VALUE (多数浏览器中表示1.7976931348623157e+308)
如果计算值超过JavaScript可表示的范围,转换为Infinity(正)无穷值,-Infinity(负)无穷值。判断是否是有限大,使用isFinite()函数
let result = Number.Max_VALUE;
console.log(isFinite(result)); //false
2.NaN
特殊数值“不是数值”(Not a Number)
console.log(NaN ==NaN); //false
console.log(isNaN(NaN)); //true
console.log(isNaN(10)); //false
console.log(isNaN("10")); //false,字符串转换为数值10
console.log(isNaN("blue")); //true,不可以转换为数值
console.log(isNaN(true)); //false,可以转换为数值1
3.数值转换
Number()函数:
- 布尔值,true转换为1,false转换为0
- 数值,直接返回
- null,返回0
- undefined,返回NaN
- 字符串
- 数字字符:十进制忽略前面的0,直接转换,十六进制,返回十进制整数
- 空字符串:返回0
- 其他:返回NaN
- 对象,调用valueOf(),按照上述规则转换返回值,如果转换结果是NaN,测调用toString()方法,再按照转换字符串的规则转换
console.log(Number("Hello world!")); //NaN
console.log(Number("")); //0
console.log(Number("00011")); //11
console.log(Number(true)); //1
parseInt()函数:
更关注字符串是否包含数值模式,字符串前面的空格会被忽略,第一个非空格字符不是数值字符、加减号,直接返回NaN【这意味着空字符串也会NaN】
console.log(parseInt("1234blue")); //1234
console.log(parseInt("")); //NaN
console.log(parseInt("0xA")); //10
console.log(parseInt(22.5)); //22
console.log(parseInt("70")); //70
console.log(parseInt("0xf")); //15
该函数也接受第二个参数为,指定底数(进制数)
console.log(parseInt("0xAF",16)); //175
console.log(parseInt("AF",16)); //175
console.log(parseInt("AF")); //NaN
parseFloat()函数:
类似parseInt()函数,但只识别第一个小数点,但该函数直解析十进制数,十六进制始终返回0,没有指定底数(进制数)
-
console.log(parseInt("1234blue")); //1234 console.log(parseInt("")); //NaN console.log(parseInt("0xA")); //0 console.log(parseInt("22.5"")); //22.5 console.log(parseInt("22.34.5"")); //22.34 console.log(parseInt("0908.5")); //908.5 console.log(parseInt("3.125e7")); //31250000
String类型
1.字符字面量(详见JS高级程序设计P63
2.转换为字符串
- toString()方法
可见于数值、布尔值、对象和字符串值(字符串值只是简单的返回自身的一个副本)
null和undefined值没有toString()方法
一般情况下,该方法不接受任何参数,对数值调用时,可以接受一个底数参数(进制数)
let a = true;
let aa = a.toString();//字符串"true"
- String()转型函数
始终返回表示相应类型值的字符串
如果值有toString()方法,则调用该方法(不传参数)并返回结果
如果值为null,返回"null"
如果值为undefined,返回"undefined"
let value3 = null;
console.log(String(value3));//"null" 同理undefined
- 模板字面量
ES6新增,跨行定义字符串,保留反引号内部的空格、换行
- 字符串插值
通过在${}中使用一个JavaScript表达式实现
let value = 5;
let str = `this is ${ value }`;
console.log(str); // this is 5
所有插入的值都会使用toString()强制转型为字符串
在插值表达式中可以调用函数和方法:
function capitalize(word) {
return `${word[0].toUpperCase()}${word.slice(1)}`
}
console.log(`${capitalize('hello')}`)//Hello
let a = 6,
b = 9
function simpleTag(strings, aValExpression, Bval, sum) {
console.log(strings)
console.log(aValExpression)
console.log(Bval)
console.log(sum)
return 'foobar'
}
let str1 = `${ a } + ${ b } = ${ a+b }`;
let str2 = simpleTag`${a}+${b} = ${a+b}`;
// [ '', '+', ' = ', '' ]
// 6
// 9
// 15
console.log(str1)// 6 + 9 = 15
console.log(str2)// foobar
function zipTag(strings, ...expressions) {
return strings[0] + expressions.map((e, i) => `${e}${strings[i+1]}`).join('')
}
let aaa = zipTag `${12} + ${44}`//后面直接加上模板字符串,这是一个标签函数
console.log(aaa)//12 + 44
Symbol类型
ES6新型的数据类型,详见js高级P69-80
Object类型
一组数据和功能的集合,object的实例本身并不是很有用,但理解与它相关的概念非常重要。
在es中Object是派生其他对象的几类,该类型的所有属性和方法在派生的对象上同样存在
object实例的属性和方法:
- constructor:创建当前对象的函数,该属性的值就是Object()
- hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)是否存在给定的属性【o.hasOwnProperty("name")】
- isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型
- propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用
- toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境
- toString():返回对象的字符串表示
- valueOf():返回对象对应的字符串、数值、布尔值表示,通常与toString()的返回值相同