1. 用var
定义的变量,在二次声明却未赋值时,该变量的值还是第一个定义的值
var a=3;
var a;
console.log(a);//3
2. valueOf
方法的使用
undefined
和null
没有valueOf
方法,使用会报错。- 布尔类型会返回原值:
true/false
- 字符串类型会返回原值
- 数字:
① 如果是整数,则需要用小括号将数字包起来再使用valueOf
方法,直接在数字后面跟valeuOf
会报错。
② 如果是小数,可以直接调用valueOf
方法- 对象
Object
类型及自定义对象类型会返回源对象(注意花括号可能会被当做代码块的问题)- 函数
function
类型会返回原函数- 数组
Array
类型返回原数组Date
对象类型返回数字(1970年1月1日00:00:00至现在的毫秒数);- 正则表达式类型返回正则对象。
//在做加法时,在对象被强制转换成数字时会调用其valueOf方法
let i = 1+{
valueOf(){
return 9;
}
}
3. forEach
、map
方法的执行是会跳过非有效值(即未初始化的值,如果直接给一个元素设置为null
和undfined
,其仍被视为有效值)
let arr = new Array(10);
let i = 0;
arr.forEach((val,index)=>{
i++;
})
console.log(i)//0
let arr = [1,undefined,null,34,3];
var i = 0;
arr.forEach((val,index)=>{
i++;
})
console.log(i)//5
4. js
的保留字
5. ({}+'b'>{}+'a')
的返回值是?
{}
在if
判断时被视为true
- 如果不带
()
,{}
在首位会被解释为代码段,而非空对象。只有在非首位的地方,{}
才会被解释为空对象{}+'b'==[object Object]b
,{}+'a'==[object Object]a
,由于+
的优先级大于>
,故先算>
两侧的加法,故最终是两个字符串进行比较大小,对字符串每一位的ascii
码依次进行比较,直到遇到不相等的字符。故最终返回值为true
6. js
中的符号优先级
从高到低
7. js
中1/0
为Infinity
,1/-0
为-Infinity
,不会报错。isNaN(1/0)
值为false
,但是0/0
的结果为NAN
,故isNaN(0/0)
结果为true
来源:CSDN
作者:Lemon
链接:https://blog.csdn.net/weixin_43314846/article/details/104702816