JavaScript Standard built-in objects

JavaScript 内置对象

ES6 标准

显示函数的调用栈,即上层函数。
fun.caller === arguments.callee.caller
arguments.callee 代表的是正在执行的fun
The caller accessor property of Function instances represents the function that invoked this function. For strict, arrow, async, and generator functions, accessing the caller property throws a TypeError.

关于 this 的一个问题

js
1let obj, method;
2
3obj = {
4  go: function() { console.log(this); }
5};
6
7obj.go();               // (1) this obj
8
9(obj.go)();             // (2) this obj
10
11(method = obj.go)();    // (3) dom 环境是 window,node 环境 global
12
13(obj.go || obj.stop)(); // (4) dom 环境是 window,node 环境 global

String

关于 surrogate pair,比如:😊。

js
1// charCodeAt 不会考虑 surrogate pair,所以返回了 𝒳 前半部分的编码:
2
3alert( '𝒳'.charCodeAt(0).toString(16) ); // d835
4
5// codePointAt 可以正确处理 surrogate pair
6alert( '𝒳'.codePointAt(0).toString(16) ); // 1d4b3

Unicode Decomposition, 变音符号

js
1let s1 = 'S\u0307\u0323'; // Ṩ, S + 上方点符号 + 下方点符号
2let s2 = 'S\u0323\u0307'; // Ṩ, S + 下方点符号 + 上方点符号
3
4alert( `s1: ${s1}, s2: ${s2}` );
5
6alert( s1 == s2 ); // 尽管这两个字符在我们看来是相通的,但结果却是 false
7
8// 使用 normalize 方法来处理这些
9
10alert( "S\u0307\u0323".normalize().length ); // 1
11
12alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true