JS 问题汇总

一、,操作符

var a,b=0;
console.log(a);//undefined
console.log(b);//0

,逗号操作符的左到右计算它的操作数,只返回最后一个操作数的值;

 逗号表达式是连续表达式,他的结果是最后一个值

 

二、parseInt 传入数字

为什么会是如下这样:

parseInt(0.000008) // >> 0
parseInt(0.0000008) // >> 8

parseInt(arg)时会先调用arg.toString()

(0.000008).toString() // "0.000008"
(0.0000008).toString() // "8e-7"
parseInt("0.000008");//0
parseInt("8e-7");//8

 三、立即执行表达式

(function (){} ());//括号里面必须是表达式

(function (){} )();

[function (){} ()] //[] 等价于 ()

//下列符号后也必须是表达式

~function (){} ();

!function (){} ();

+function (){} ();

-function (){} ();

delete function (){} ();

typeof function (){} ();

void function(){} ();

var f=function (){} ();

1,function (){} (); //,后面必须是表达式

1 ^ function (){} ();

1 > function (){} ();

四、类型

typeof false //"boolean"
typeof .2//"number"
typeof NaN //"number"
typeof '';//"string"
typeof undefined //"undefined"
typeof Symbol();//"symbol"
 
typeof new Date();//"object"
typeof [] //"object"
typeof alert //"function"
typeof null //"object"

五、实现浮点数转整数,或者说取出数字的整数部分

function converInt(num){
        return num >> 0;
}

convertToInt(-Math.PI); // -3

convertToInt(12.921); // 12

符号右移会将左操作数转换为32位整数

num | 0也是可以的

六、一个this的问题

function djw(){
      console.log(this);
}
djw(); // Window
djw.call(null/undefined); // Number 特殊情况因为'/'
djw.call(null);//window
djw.call(undefined);//window
djw.call(1); // Number


function djw(){
      'use strict';
      console.log(this);
}
djw(); // undefined
djw.call(null/undefined); // NaN
djw.call(null);//null
djw.call(undefined);//undefined
djw.call(1); // 1

 非严格模式下,this默认指向全局对象window,call或apply显式指定this参数时也会强制转换参数为对象(如果不是对象)。其中,null/undefined被替换为全局对象,基础类型被转换为包装对象。

严格模式下,this 默认为undefined,且call或apply显式指定this参数时也不会有强制转换 

七、给基础类型添加属性无效

var num =0;
num.prop=1;
console.log(num.prop);

 num.prop 等同于 Object(num).prop,也就是说我们添加属性到一个新建的对象上,与num没任何关系。

猜你喜欢

转载自355504677.iteye.com/blog/2373349