你不知道的js
for与while
for循环理论上和while是一样的
因为for循环的执行步骤有
1.声明变量 i = 0
2.if( i < 10){
console.log(i)
}
3.i++
所以就可以写成
var i = 0
for(; i < 10 ; ){
console.log(i)
i++
}
而while循环
var i = 0
while(i < 10){
console.log(i)
i++
}
所以是不是非常相似
typeof
console.log(typeof arguments) //'object'
console.log(typeof Function()); //'function'
console.log(typeof Function); //'function'
console.log(typeof Object); //'function'
console.log(typeof Object()); //'object'
console.log(typeof(null)); //object
console.log(typeof([])); //object
console.log(typeof({})) //object
console.log(typeof(123)); //number
console.log(typeof(true)); //boolean
console.log(typeof undefined); //undefined
console.log(typeof(function(){})); //function
为什么typeof(null)是object 因为 null最开始是空对象的指针 空对象的占位符 最早是引用类型 现在没有改 所以可以当做是历史遗留问题
当我们打印一个未定义的a 会报错
console.log(a)
而console.log(typeof(a)) 返回undefined
注意
console.log(typeof(typeof(a))) 返回string
typeof(typeof(任何值)) 返回string
显示类型转换
var a = 'aaa'/true/false/null/undefined/'3.14'/'3'/'1ddd'
console.log(typeof(Number(a))) //NaN 1 0 0 NaN 3.14 3 NaN
var a = '3.14'/true/false/null/undefined/'3'/'6g454'/'abc123'
console.log(typeof(parseInt(a))); // 3 NaN NaN NaN NaN 3 6 NaN
parseInt(a,16)还可以传第二个值 表示转换成的进制
parseFloat四舍五入
var num = parseFloat('3.1445')
console.log(num.toFixed(2)) //保留两位小数
toString() 转化为字符串 也可以传第二个参数 表示转换的进制
Boolean() 转换为布尔值 null/undefined/" "/0/NaN/false 转换为false 其余都为true
隐式类型转换
var a = '123'
a++
console.log(a);//124
0/0 => NaN
任何数除以NaN 或者NaN除以任何值 => NaN
运算 > 赋值
NaN 与包括自己在内的任何东西都不相等
&& 遇到真就向后走 遇到假就返回当前的值
|| 遇到假就向后走 遇到真就返回当前的值
undefined null 既不大于0也不小于0也不等于0
unsefined == null 返回true
isNaN() 先对括号中的进行隐式类型转换Number()在进行判断是否是NaN 如果是就返回true 不是就返回false
var a = false + 1;
console.log(a); //1
var b = false == 1;
console.log(b); //false
if (typeof(a) && (-true) + (+undefined) + '') {
console.log('通过了'); //'NaN'
} else {
console.log('没通过');
}
console.log(typeof a); //'undefined'
console.log(-true); //-1
console.log(+undefined); //NaN
if (1 + 5 * '3' === 16) {
console.log('通过了'); //通过了
} else {
console.log('没通过');
}
console.log(!!' ' + !!'' - !!false || '未通过'); //1
console.log(!!' '); //true
console.log(!!''); //false
console.log(!!false); //false