ES6学习笔记(四):基本引用类型2:数值与布尔

一、数值与Number

JavaScript中对所有的数字只有一种类型,它把所有的数字都作为浮点数,JS中的数字是双精度值(64位)。

  • 整数字面量
    • 除了十进制以外,JavaScript还能识别十六进制(0x或0X为前缀)、二进制(0b或0B为前缀)和八进制(0o或0O为前缀)。
    • 但是在ES6的严格模式下,就禁止使用八进制了。
{
	let num = 100; // 十进制整数
	let num2 = 0b1001; // 二进制数等于十进制 9
	let num3 = 0xff; // 十六进制数等于十进制 255
}
  • 浮点数字面量
    • 实数写法:由整数部分、小数点和小数部分组成。如3.14
    • 指数记数发:在实数部分后面跟e或E,再跟正负号,再跟一个整型的指数。如5e2就是500,0.5e-2就是0.005

在字面量上调用方法

{
	123..toString();
	123 .toString();
	123.0.toString();
	(123).toString();
}

对于数字字面量,用来访问一个属性的点必须要和小数点的点区分开来,以上是在数字字面量123上调用toString的几种方法。

1.转换成数字

其他值转为数字的转换如下表所示:

结 果
undefinedNaN
null0
布尔值false转为0,true转为1
数字保持不变(没什么好转换的)
字符串解析字符串中的数字(忽略开头和结尾的空格)空字符转为0
对象对象会先转换为原始值,然后再转换为数字

JavaScript提供了三个函数可将非数值转换为数值。Number()、parseInt()、parseFloat()。

一些小例子

{
	Number(''); // 0
	Number(false); // 0
	Number(null); // 0
	Number(undefined); // NaN
	Number('011'); // 11
	Number('1.1'); // 1.1
	Number('0xf'); // 15

	// parseInt()
	parseInt(22.5); // 22
	parseInt('0xA'); // 10
	parseInt('A', 16); // 第二个参数为 16进制转为 10
	parseFloat('3.14159e3'); // 3141.59
}

2.数值的算术运算

  • 运算符:+、-、*、/、%、**(指数运算符,ES6新增)
  • 溢出(overflow):当数值运算结果超过了JavaScript能表示的数值上限时发生,结果为Infinity,若超过了负数范围则为-Infinity。
  • 下溢(underflow):当运算结果无限接近于0,并比JavaScript能表示的最小值还小时发生,JS会返回0,若为负数发生下溢,则返回-0。

3.特殊的数字值

JavaScript中有一些特殊的数字值:

  • 两个错误值:NaN和Infinity
  • 两个零值:+0和-0

NaN(not a number)

{
	// NaN居然是一个数字
	console.log(typeof NaN); // 输出 number
	// NaN是唯一一个和自身不相等的值
	console.log(NaN === NaN); // false
	// 检查一个值是否是NaN,必须使用全局函数isNaN();
	console.log(isNaN(NaN)); // 输出 true
	console.log(isNaN(123)); // 输出 false
}

Infinity:一个大到无法表示的数字,或者除以了0

{
	console.log(Math.pow(2,1024)); // 数学对象的方法表示2的1024次方,结果为Infinity
	console.log(3/0); // 输出Infinity
}

4.Number函数

Number函数可以用两种方式调用

  • Number(value)作为一个常规函数,将value转换为一个原始数字。
  • new Number(num)作为构造函数,创建了一个Number的实例,即一个包装了num的对象
{
	console.log(typeof Number('123')); // 输出number
	console.log(typeof new Number(3)); // 输出object
}

4.1 Number的构造器属性

Number对象有如下属性:

{
	1.Number.MAX_VALUE 表示可以表示的最大正数
	console.log(Number.MAX_VALUE) // 1.7976931348623157e+308
	2.Number.MIN_VALUE 表示可以表示的最小正数值
	console.log(Number.MIN_VALUE); // 5e-324
	3.Number.NaN 和全局的NaN是相同的值
	4.Number.NEGATIVE_INFINITY-infinity相同
	console.log(Number.NEGATIVE_INFINITY === -Infinity); // true
	5.Number.POSITIVE_INFINITYInfinity相同
	console.log(Number.POSITIVE_INFINITY === Infinity); // true
}

4.2 Number的方法

原始值中数字的所有方法都存储在Number.prototype中,关于原型的学习整理在后续的笔记中,这里就直接简写方法。

常用的方法:

{
	1.Number.toString(); 参数可以是2,10,16表示相对应的进制数
	let num = new Number(100);
    console.log(num.toString()); // 输出字符串的 100

	2.Number.valueOf(); 返回数值对象的原始数值,也就是去包装过程
	let num1 = new Number(100);
    console.log(num1.valueOf()); // 输出数值的 100

	3.Number.toFixed(n); 返回包含n位小数位数的数值字符串
	console.log(10.005.toFixed(2)); // 输出字符串的 10.01 会四舍五入

	4.Number.toExponential(n); 返回科学计数法表示的数值字符串,n表示结果中的小数位数
	console.log(10.1234.toExponential(4)); // 输出 1.0123e+1
}

用于数字的方法:

{
	1.Number.isFinite(); 用于检查一个数值是否是有限的
	console.log(Number.isFinite(10)); // true
	console.log(Number.isFinite(NaN)); // false
	console.log(Number.isFinite('foo')); // false
	如果参数类型不是数值,那么一律都会返回false

	2.Number.isNaN(); 用于检查一个数值是否为NaN
	console.log(Number.isNaN(10)); // false
	console.log(Number.isNaN(true)); // false
	如果参数类型不是NaN,那么一律返回false

	3.Number.parseInt()和Number.parseFloat()与全局的这两个方法是一样的,
	只是ES6将全局的 parseInt()parseFloat()移植到了Number对象中。
	console.log(Number.parseInt === parseInt); // true
	console.log(Number.parseFloat === parseFloat); // true

	4.Number.isInteger() 用于判断一个数值是否为整数
	console.log(Number.isInteger(12.1)); // false
	console.log(Number.isInteger('123')); // false
	如果参数不是数值以及不是整数,返回false
}

5.Math对象

属性功能
Math.E自然对数e的值
Math.PIπ的值
Math.max()返回给定参数中的最大值
Math.min()返回给定参数中的最小值
Math.cell()向上舍入最接近的整数
Math.floor()向下舍入最接近的整数
Math.round执行四舍五入
Math.random()返回一个0-1之间的随机数,其中包含0但不包含1

其他更多的方法可以查阅W3CSchool的官方文档JavaScript的Math对象

二、布尔Boolean

JavaScript中原始的布尔类型包括两个值,true和false

转换成布尔值

转换成的布尔值
undefinedfalse
nullfalse
布尔值与输入相同(没必要转换)
数字0,NaN转换为false,其他数字转换成true
字符串空字符串转换成false,其他字符串转换成true
对象总是为true

利用隐式转换

{
    let x = 100;
    let y = null;
    let z;
    if (x) {
        console.log(x);
    }
    if (y != null) {
        console.log(y);
    }
    if (z) {
        console.log(z);
    }
}

上面的代码会输出100,因为if的判断条件会隐式的转换表达式的值,所以当表达式里的值为true时才会执行条件里的语句,因此输出了100.

逻辑运算符的妙用

短路运算:如果第一个表达式已经决定了结果,那么就不再求第二个表达式的值,这就是短路运算。
举个例子:

{
	console.log(true || 'hello'); // 输出 true
    console.log(false || 'world'); // 输出 world
}

通过上面这个特性可以用在一些场景中,比如函数参数的默认值等等。

{
	function test(text){
		text = text || 'hello';
		return console.log(text);
	}
    test(); // 输出 hello
}

因为函数没有传入参数,因此函数体内有短路运算设置了默认值,因此输出了hello。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值