Open7
bunのECMAScript仕様非準拠の挙動
bunは実行前にトランスパイラをかけることなどによって、ECMAScriptの仕様に準拠していない挙動があるので思いついた限りまとめてみる
Function::nameがつくべきでないときもつく (仕様の該当箇所)
これらのconsole.assert
が落ちる
var a = (0, function () {})
console.assert(a.name === '', 'Expected `a.name` to be empty')
var b = true ? function () {} : function () {}
console.assert(b.name === '', 'Expected `b.name` to be empty')
おそらくトランスパイラでvar a = function() {}
やvar b = function () {}
にされるため
逆にFunction::nameがつくべきなときにつかないこともある
{
function foo() {}
console.assert(foo.name === 'foo', 'Expected foo.name to be "foo"');
}
{
function foo() {}
console.assert(foo.name === 'foo', 'Expected foo.name to be "foo"');
}
ほかのケースとしては
using foo = null
console.log(bar)
const bar = ''
エラーが起きるべきだが、undefined
が出力される
おそらくesbuildの挙動をポートした名残り