Infinity 代表什么数据?
✂【回答】
Infinity
是一个存放表示正无穷大的数值,-Infinity
即负无穷大。Infinity
是全局对象(global object)的一个属性,是全局变量。- 在 ECMAScript 5 的规范中,
Infinity
是只读的。
🖊【便签】
- 注意
Infinity
首字母需大写。 - 函数
isFinit(val)
可以用来检测数值是否有限。
请解释下题的输出结果
var val = "test";
console.log("output is " + (val === "Test") ? "123" : "456"); // 123
✂【回答】
该题涉及到了一个运算符优先级的问题,此处即 ()
> +
> ?
。所以代码实际打印的是:Boolean("output is false")
的条件值。
🖊【便签】
Boolean("任意字符")
结果为true
;Boolean("")
结果为false
。
如何把 10.36 四舍五入为最接近的整数?
✂【回答】
实现“四舍五入”的方法有:
Math.round(x)
将数字四舍五入到最接近的整数,如:Math.round(10.36)
。NumberObject.toFixed(num)
将数字四舍五入为给定的位数,如:(10.36).toFixed(0)
。Math.floor(x)
将数字下舍入最接近的整数,如:Math.floor(10.36)
。parseInt(string, radix)
解析字符串并返回整数,如:parseInt(10.36)
。Math.trunc(x)
返回数字的整数部分,如:Math.trunc(10.36)
。~~
做两次按位取反的操作,如:~~(10.36)
。
🖊【便签】
Math.ceil(x)
将数字上舍入最接近的整数,如:Math.ceil(10.36)
。(10.36) === Number(10.36) // => true
,Number(10.36) === new Number(10.36) // => false
。
请解释以下题目会输出的结果(类型转换)
var temp = [0];
if ([0]) {
console.log(temp == true);
} else {
console.log("测试");
}
// 打印结果是:false
✂【回答】
- 尝试
console.log(temp);
,得到[[Prototype]]: Array(0)
,即[0]
是数组对象。 - 所有除
false
、0
、-0
、0n
、""
、null
、undefined
和NaN
以外的皆为真值,所以[0]
是真值。 - 在布尔值上下文中,真值会转换为
true
,故if ([0])
等价于if (true)
。此处为隐式转换(强制转换)。 - 运行
==
的判断规则,temp.valueOf()
转换为数值0
,true
转化为1
,两者不相等。所以输出结果是false
。
🖊【便签】
==
和 !=
的判断规则:
- 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值----
false
转化为0
,true
转化为1
。 - 如果有一个数是字符串,另一个操作数是数值,将字符串转化成数值。
- 如果一个操作数是对象,另一个操作数不是对象,将对象转化为基本操作类型(先
valueOf()
,再toString()
,均不能得到基本类型的值则会报错),再比较。
请说说 new String(“A”) 和 String(“A”) 分别返回的结果,请解释为什么?
✂【回答】
返回结果:
new String("A")
打印为String
对象,是复杂数据类型(引用类型)。String("A")
打印为A
,是简单数据类型(基础类型)。
原因:
new String('A')
通过new
字符,调用了String
构造函数,创建一个对象实例。- 字符串字面量(通过单引号或双引号定义)和直接调用
String
方法(没有通过new
生成字符串对象实例)的字符串都是基本字符串。 - 故
String("A")
生成的字符串是基本字符串。
🖊【便签】
简单数据类型(基础类型):
number, string, boolean, undefined, null
复杂数据类型(引用类型):
Array, function, Object
简单数据类型存储在栈内存,赋值的时候是将值复制一份给别人——值传递。
复杂数据类型存储在堆内存,将堆内存的地址存储在栈内存。赋值的时候是将自己的地址复制一份给别人——址传递(引用传递)。
当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JS 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
劝学
你有没有注意到,昂扬的斗志,是何等不可抗拒而不可战胜吗?任何心灵有了它,就可以无所畏惧,所向无敌。——柏拉图《理想国》