?uem/p1-90`如果
无论控制如何离开
eval 函数的调用都返回值 1:
eval("1;;;;;")
eval("1;{}")
eval("1;var a;")
当对
调用时,它执行以下步骤:
let、const、using 和 await using 声明let、const、using 和 await using 声明定义作用域限定于let 声明中的
当处理产生式
的实例时,使用以下文法进一步细化对
const、using 或 await using 声明中。
var 语句声明作用域限定于
如果
它按以下产生式分别定义:
function 或 class async function 开头,因为这会使其与 let [ 开头,因为这会使其与第一个 let
if 语句只有在实现了
在
do-while 语句只有在实现了
while 语句只有在实现了
for 语句只有在实现了
for-in、for-of 和 for-await-of 语句本节由附录
只有在实现了
本节由附录
本节由附录
next 方法迭代 obj 的所有可枚举属性中值为 String 的键。该迭代器对象永远无法被 ECMAScript 代码直接访问。枚举属性的机制和顺序未作规定,但必须符合下述规则。该迭代器的 throw 和 return 方法为 next 方法处理对象属性,以确定是否应将next 方法处理某个属性之前删除该属性时,会忽略该属性。如果在枚举期间向目标对象添加新属性,则不保证在当前枚举中处理新添加的属性。在任意一次枚举中,一个next 方法返回一次。
枚举目标对象的属性包括递归枚举其原型、原型的原型,依此类推;但如果原型的某个属性与迭代器的 next 方法已经处理过的属性具有相同名称,则不会处理该原型属性。在确定原型对象的某个属性是否已经被处理时,不考虑 [[Enumerable]] 特性的值。必须通过以原型对象为参数调用 EnumerateObjectProperties 来获取原型对象的可枚举
此外,如果 obj 及其原型链中的任何对象都不是
ECMAScript 实现无需直接实现
以下是符合这些规则的 ECMAScript 生成器函数的非规范性定义:
function* EnumerateObjectProperties(obj) {
const visited = new Set();
for (const key of Reflect.ownKeys(obj)) {
if (typeof key === "symbol") continue;
const desc = Reflect.getOwnPropertyDescriptor(obj, key);
if (desc) {
visited.add(key);
if (desc.enumerable) yield key;
}
}
const proto = Reflect.getPrototypeOf(obj);
if (proto === null) return;
for (const protoKey of EnumerateObjectProperties(proto)) {
if (!visited.has(protoKey)) yield protoKey;
}
}
For-In Iterator 是表示对某个特定对象进行一次特定迭代的对象。For-In Iterator 对象永远无法被 ECMAScript 代码直接访问;它们仅用于说明
%ForInIteratorPrototype% 对象:
| 内部槽 | 类型 | 描述 |
|---|---|---|
| [[Object]] | Object | 正在迭代其属性的 Object 值。 |
| [[ObjectWasVisited]] | Boolean |
如果迭代器已在 [[Object]] 上调用 [[OwnPropertyKeys]],则为 |
| [[VisitedKeys]] |
String 的 |
到目前为止由此迭代器发出的值。 |
| [[RemainingKeys]] |
String 的 |
在迭代其原型的属性(如果其原型不是 |
continue 语句static 初始化块边界),则为语法错误。
break 语句static 初始化块边界),则为语法错误。
return 语句return 语句会使函数停止执行,并且在大多数情况下向调用方返回一个值。如果省略 return 语句实际上可能不会向调用方返回值。例如,在 try 块中,return 语句的 finally 块求值期间被另一个
with 语句with 语句会为计算得到的对象向
只有在实现了
switch 语句如果
此操作不会执行 caseClauseNode 的
无论控制如何离开
break 和 continue 语句一起使用。ECMAScript 没有 goto 语句。一个
throw 语句try 语句try 语句包围一段可能发生异常状况的代码块,例如运行时错误或 throw 语句。catch 子句提供异常处理代码。当 catch 子句捕获异常时,其
无论控制如何离开
debugger 语句对