Open OPY-bbt opened 4 years ago
typeof 一个未声明的变量,返回undefined
// var age = true
typeof age === undefined
undefined是派生自null值的,因此ECMA-262规定 undefined == null
js中将对象转化为数字的一般过程是先调用对象的valueOf方法,看结果是否能转为数值,如果转换结果是NaN,继续调用toString方法,再测试返回值,如果还不行就返回NaN
parseInt 在ECMAScript 3的js引擎中,070会被当成八进制,转换结果为56,而在ECMAScript 5 js引擎中,parseInt 已经不具备解析八进制的能力,转换结果为70。为了解除上述困惑,所以parseInt支持第二个参数,指定基数。这也就是ESlint里必须设置第二个参数的原因。
负数用补码的形式存储,求一个数的补码就是用绝对值取反加+1。
对一个数执行按位非操作,实际等于取反-1
>>
,<<
为有符号的左右移动,即不移动符号位。(负数右移补1,左移补0)
>>>
,<<<
为无符号的左右移动,即符号位也会被移动。
js里所有的函数参数传递方式都是按值传递。相当于复制操作。
array instanceof Array
如此判断数组的问题在于,如果存在两个框架,就会有不同版本的Array构造函数。例如
var iframeEl = document.createElement('iframe');
document.body.appendChild(iframeEl);
iframeArray = window.frames[window.frames.length - 1].Array;
var array1 = new Array(1,1,1,1);
var array2 = new iframeArray(1,1,1,1);
console.log(array2 instanceof Array);
console.log(array2 instanceof iframeArray);
function isArray(array) {
return Object.prototype.toString.call(array) === '[object Array]';
}
console.log(isArray(array1));
console.log(isArray(array2));
arguments arguments.callee this
function factorial(num) {
if (num === 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
保存着调用当前函数的函数引用
function outer() { inner();}
function inner() { console.log(inner.caller);} // outer代码
outer();
函数形参数量
在html中嵌入javascript时,不能在任何地方出现
此时需要转义<\/script>