1. 函数隶属于 Object 类型, 但 typeof functin(){} === 'function'
function getUser(){} typeof getUser === 'function' 不存在 function 类型 因为 javaScript 函数区别对待而返回 function,在理论编程中十分不便。
2. 函数申明和函数表达式那个先被创立
let getUser = funnction() {} getName(){} 因为 javaScript 外部的算法起因, 在 javaScript 初始化阶段就曾经将脚本中的函数申明都给创立了 而函数表达式是在申明一个 getUser 所赋值运算时才去创立也就是说但执行栈执行到该行代码时创立, 所以函数申明会先被创立, 这也是为什么 能够在函数申明前调用函数的起因
3. 构造函数只能返回对象,其余类型将会被疏忽
1. function F(){} new F() 时将会隐式创立一个对象赋值个 this ,并操作对象, 最初隐式放回 this 2. function F(){ return "Jason"; } new F() 这里将会疏忽放回值 "Jason", 返回 this 指向的对象 3. function F() { return { name: 'Jason'} } new F() 这里将不会返回 this 所指向的对象,this 对象被笼罩, 返回的是 {naem: 'Jason'} 对象
4.NaN 不等于任何值,包含它本人
NaN !== NaN true
5.isNaN 判端 NaN 谬误
isNaN(NaN) // true 1 isNaN('abc') // true 2 isNaN在如上 2 的测试中明显 'abc' 是一个字符串不是 NaN 然而他会返回 true 这 javaScript 的一个谬误,咱们能够应用 Number.isNaN() 进行判端,该办法很好的判断 NaN Number.isNaN(NaN) // true Number.isNaN('abc') // false
6. 数值计算精度失落
0.1 + 0.3 === 0.3 false 其实等于 0.30000000000000004 办法一 parsefloat((0.1+0.2).toFixed(2)) 办法二 (0.2 * 1e20 + 0.3 * 1e20)/1e20
7 实例对象中的 constructor 指向构造函数自身
functin F() let f = new F() f.constructor === F // true f.constructor 可结构实例 let f2 = new f.constructor(); f2.constructor === F // true
8 intanceof 比拟的的是元素链中的原始对象
function f(){} f intanceof Object // true
9. null 转换为 Number 为 0 , undefined 转换为 Number 是为 NaN
+null 0 +undefined NaNN
10 F.call.call()到底在为谁 call, 再多的call 都会被视为 F.call()