你不知道的javascript(一)

发布于:2022-12-06 ⋅ 阅读:(332) ⋅ 点赞:(0)

你不知道的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