js语法基础-语句

154 阅读2分钟

1 for-in

for-in语句是一种严格的迭代语句,用于枚举对象中的非符号键属性

let stu = {
    name: "kobe",
    age: 12,
    [Symbol("foo")]: "符号属性",
};
for (const prop in stu) {
    console.log(prop);
}

输出:指数出了name和age两个属性,没有输出符号属性

name
age

关于符号属性定义:js语法基础-数据类型

如果for-in循环要迭代的变量是null或undefined,则不执行循环体。

2 for-of语句

for-of语句是一种严格的迭代语句,用于遍历可迭代对象的元素

for (const el of [2,4,6,8]) {
 console.log(el);
}

如果尝试迭代的变量不支持迭代,则for-of语句会抛出错误。

ES2018对for-of语句进行了扩展,增加了for-await-of循环,以支持生成期约(promise)的异步可迭代对象。

3 with语句

with语句的用途是将代码作用域设置为特定的对象

使用with语句的主要场景是针对一个对象反复操作,这时候将代码作用域设置为该对象能提供便利

let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;

上面代码中的每一行都用到了location对象。如果使用with语句,就可以少写一些代码:

with(location) {
  let qs = search.substring(1);
  let hostName = hostname;
  let url = href;
}

with语句用于连接location对象。这意味着在这个语句内部,每个变量首先会被认为是一个局部变量。如果没有找到该局部变量,则会搜索location对象,看它是否有一个同名的属性。如果有,则该变量会被求值为location对象的属性。

严格模式不允许使用with语句,否则会抛出错误。

由于with语句影响性能且难于调试其中的代码,通常不推荐在产品代码中使用with语句。