1、undefined和null的定义与区别
(1)定义
undefined:是所有没有赋值变量的默认值,自动赋值。
null:主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。
(2)区别
①类型不同
<script>
console.log(typeof(undefined));//结果为undefined
console.log(typeof(null));//结果为object
</script>
null的返回结果为object是由于历史原因导致的:JavaScript语言的第一版把所有值都设计成32位,其中最低的3位用来表述数据类型,object对应的值是000。当时,只设计了五种数据类型(对象、整数、浮点数、字符串和布尔值),完全没考虑null,只把它当作object的一种特殊值,32位全部为0。这是typeof (null)返回object的根本原因。
②转换为数值类型的时候,返回值不一样
<script>
console.log(Number(undefined));//结果为NaN
console.log(Number(null));//结果为0
</script>
NaN意思是:不是一个数,由于undefined表示未定义,所以返回值为NaN。null则会强制转换为0。
③转为布尔类型的时候,值相等,类型不同
<script>
console.log(undefined==null);//结果为true
console.log(undefined===null);//结果为false
</script>
转换为布尔类型中:代表空,否定的值会被转换为false。==:是值相等,===:是值和类型都相等。由于undefined与null都为false,所以==值为true,但是它们类型不同,所以===是false。
2、new关键字的作用
(1)在构造函数代码开始执行之前,创建一个空对象;
(2) 修改this的指向,把this指向创建出来的空对象;
(3) 执行函数的代码;
(4)在函数完成之后,返回this---即创建出来的对象。
3、call()和apply()作用与区别
(1)call()和apply()的作用:改变this指向。
(2)call()和apply()的区别:接收参数的方式不同。
apply()方法接收两个参数,一个是函数运行的作用域(this
),另一个是参数数组。
call()方法不一定接受两个参数,第一个参数也是函数运行的作用域(this
),但是传递给函数的参数必须列举出来。
<script>
var func1 = function(arg1, arg2){};//定义函数func1
func1.call(this, arg1, arg2);
func1.apply(this, [arg1, arg2]);
</script>
4、Math对象
(1)定义:Math对象不是构造函数,不需要使用new关键字调用。
(2)相关使用
<script>
console.log(Math.PI)//圆周率
console.log(Math.max(1,2,3))//3,取最大值
console.log(Math.min(1,2,3))//1,取最小值
console.log(Math.max(1,2,"a"))//NaN
console.log(Math.max())//-Infinity
console.log(Math.min())//Infinity
console.log(Math.abs(1))//1,取绝对值
console.log(Math.abs(-1))//1,取绝对值
console.log(Math.abs("-1"))//1,取绝对值
console.log(Math.abs("a"))//NaN
console.log(Math.floor(1.1))//1,向下取整
console.log(Math.floor(1.9))//1,向下取整
console.log(Math.ceil(1.1))//2,向上取整
console.log(Math.ceil(1.9))//2,向上取整
console.log(Math.round(1.1))//1,四舍五入
console.log(Math.round(1.5))//2,四舍五入
console.log(Math.round(-1.1))//-1,四舍五入
console.log(Math.round(-1.5))//-1 特殊值
console.log(Math.round(-1.6))//-2,四舍五入
console.log(Math.random());//随机返回一个0~1之间的小数(不包括0和1)
</script>