前提
JavaScriptのパッケージであるnode-fetchのソースコードリーディングをしています。
実現したいこと
以下のisRequestという関数のコードについて、質問が2つあります。
js
1const INTERNALS = Symbol('Request internals'); 2 3/** 4 * Check if `obj` is an instance of Request. 5 * 6 * @param {*} object 7 * @return {boolean} 8 */ 9const isRequest = object => { 10 return ( 11 typeof object === 'object' && 12 typeof object[INTERNALS] === 'object' 13 ); 14};
https://github.com/node-fetch/node-fetch/blob/main/src/request.js
① const INTERNALS = Symbol('Request internals');
は文字列を定義しているという理解で合っていますでしょうか。
② ローカルで同じコードを実行しても、結果がfalseになり、予想と異なります。なぜでしょうか。
ローカルで実行しているコード
js
1const INTERNAL = Symbol('Request Internal'); 2 3const isRequest = object => { 4 return ( 5 typeof object === "object" && 6 typeof object[INTERNAL] === "object" 7 ); 8} 9 10const req = new Request("https://example.com"); 11console.log(isRequest(req));
実行コマンド
sh
1❯ node -v 2v18.11.0 3❯ node test.js 4false