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()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。