OPY-bbt / OPY-bbt.github.io

my webpage
https://opy-bbt.github.io/
0 stars 0 forks source link

JS 高程 #23

Open OPY-bbt opened 4 years ago

OPY-bbt commented 4 years ago

在html中嵌入javascript时,不能在任何地方出现

<script>
  function hello() {
    alert("</script>");  // Uncaught SyntaxError: Invalid or unexpected token
  }
</script>

此时需要转义<\/script>

OPY-bbt commented 4 years ago

typeof 一个未声明的变量,返回undefined

// var age = true
typeof age === undefined
OPY-bbt commented 4 years ago

undefined是派生自null值的,因此ECMA-262规定 undefined == null

OPY-bbt commented 4 years ago

js中将对象转化为数字的一般过程是先调用对象的valueOf方法,看结果是否能转为数值,如果转换结果是NaN,继续调用toString方法,再测试返回值,如果还不行就返回NaN

OPY-bbt commented 4 years ago

parseInt 在ECMAScript 3的js引擎中,070会被当成八进制,转换结果为56,而在ECMAScript 5 js引擎中,parseInt 已经不具备解析八进制的能力,转换结果为70。为了解除上述困惑,所以parseInt支持第二个参数,指定基数。这也就是ESlint里必须设置第二个参数的原因。

OPY-bbt commented 4 years ago

负数用补码的形式存储,求一个数的补码就是用绝对值取反加+1。 对一个数执行按位非操作,实际等于取反-1 >>,<<为有符号的左右移动,即不移动符号位。(负数右移补1,左移补0) >>>,<<<为无符号的左右移动,即符号位也会被移动。

OPY-bbt commented 4 years ago

js里所有的函数参数传递方式都是按值传递。相当于复制操作。

OPY-bbt commented 4 years ago
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));
OPY-bbt commented 4 years ago

函数的内部属性

arguments arguments.callee this

function factorial(num) {
  if (num === 1) {
    return 1;
  } else {
    return num * arguments.callee(num - 1);
  }
}

函数对象属性 caller

保存着调用当前函数的函数引用

function outer() { inner();}
function inner() { console.log(inner.caller);} // outer代码
outer();

函数对象属性 length

函数形参数量