TypeError: "x" is (not) "y"
JavaScript çãx is (not) yãä¾å¤æå¨åºç¾éé æçå奿ç¼çãéé常æ¯éé æç undefined æ null å¼ã
è¨æ¯
TypeError: Cannot read properties of undefined (reading 'x')ï¼åºæ¼ V8ï¼ TypeError: "x" is undefinedï¼Firefoxï¼ TypeError: "undefined" is not an objectï¼Firefoxï¼ TypeError: undefined is not an object (evaluating 'obj.x')ï¼Safariï¼ TypeError: "x" is not a symbolï¼åºæ¼ V8 & Firefoxï¼ TypeError: Symbol.keyFor requires that the first argument be a symbolï¼Safariï¼
é¯èª¤é¡å
TypeErrorã
åªè£¡åºé¯äºï¼
åºç¾äºéé æçåå¥ãéé常ç¼çå¨ undefined æ null å¼çæ
æ³ã
æ¤å¤ï¼æäºæ¹æ³ï¼ä¾å¦ Object.create() æ Symbol.keyFor()ï¼éè¦æä¾ç¹å®çåå¥ã
ç¯ä¾
>ç¡æçæ¡ä¾
ä½ ä¸è½å¨ undefined æ null çè®æ¸ä¸å¼å«æ¹æ³ã
js
const foo = undefined;
foo.substring(1); // TypeError: foo is undefined
const foo2 = null;
foo2.substring(1); // TypeError: foo2 is null
æäºæ¹æ³å¯è½éè¦ç¹å®çåå¥ã
js
const foo = {};
Symbol.keyFor(foo); // TypeError: foo is not a symbol
const foo2 = "bar";
Object.create(foo2); // TypeError: "foo2" is not an object or null
ä¿®æ£åé¡
çºäºä¿®æ£å° undefined æ null å¼é²è¡ååçåé¡ï¼ä½ å¯ä»¥å
æ¸¬è©¦è©²å¼æ¯å¦çº undefined æ nullã
js
if (foo !== undefined && foo !== null) {
// ç¾å¨æåç¥é foo 已被å®ç¾©ï¼å¯ä»¥ç¹¼çºå·è¡ã
}
æè
ï¼å¦æä½ ç¢ºå® foo 䏿æ¯å
¶ä»åå¼ï¼ä¾å¦ "" æ 0ï¼ï¼æè
éæ¿¾æéäºæ
æ³ä¸æåé¡ï¼ä½ å¯ä»¥ç´æ¥æ¸¬è©¦å
¶çåå¼ã
js
if (foo) {
// ç¾å¨æåç¥é foo æ¯çå¼ï¼æä»¥å®å¿
å®ä¸æ¯ null/undefinedã
}