Open lizhongzhen11 opened 4 years ago
全局对象:
[[Construct]]
new
[[Call]]
[[Prototype]]
globalThis
realm.[[GlobalEnv]].[[GlobalThisValue]]
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
Infinity
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
eval 函数就是 %eval% 固有对象。
eval
String
注意:如果调用上下文正在对形参初始化器求值或调用上下文的代码或者eval代码是 严格模式,那么eval代码不能在调用eval的上下文变量环境中实例化变量或函数绑定。上述绑定会在新的只有eval代码才能访问的变量环境中实例化。let, const, class 声明总是在新的词法环境进行实例化绑定。
let, const, class
先转 Number
Number
isFinite(Infinity) // false isFinite(NaN) // false isFinite(-Infinity) // false isFinite(0) // true isFinite(2e64) // true isFinite("0") // true isFinite(9n) // Uncaught TypeError: Cannot convert a BigInt value to a number isFinite(undefined) // false isFinite(null) // true isFinite({}) // false isFinite([]) // true
isFinite 函数就是 %isFinite% 固有对象。
由于内部用的是 ToNumber 算法,所以对于对象,改写其 toString 方法返回有限值就能得到 true
toString
const obj = { toString() { return 1 } } Number(obj) // 1 isFinite(obj) // true
对应 %isNaN% 固有对象。
isNaN(NaN) // true isNaN({}) // true
内部用的是 ToNumber 算法,所以对于对象,改写其 toString 方法返回非 NaN 值就能得到 true
NaN
全局对象:值属性与函数属性(globalThis/Infinity/NaN/undefined/eval/isFinite/isNaN)
全局对象:
[[Construct]]
内置方法;不能被new
操作符当成 构造器 调用[[Call]]
内置方法;不能被当成函数调用[[Prototype]]
内置插槽,其值依赖于具体实现全局对象的值属性
globalThis
属性初始值为realm.[[GlobalEnv]].[[GlobalThisValue]]
{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
Infinity
值为 +∞(见 重学js —— js数据类型(二):Number(一))。{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }
全局对象的函数属性
eval(x)
eval
函数就是 %eval% 固有对象。PerformEval( x, callerRealm, strictCaller, direct )
String
类型,返回 xisFinite( number )
isFinite 函数就是 %isFinite% 固有对象。
isNaN
对应 %isNaN% 固有对象。
本篇结束,后续见下一篇