JS - with 语句 & switch 语句

143 阅读2分钟

with 语句主要场景是针对一个对象反复操作,用途是将代码作用域设置为特定的对象,语法是with (express) statement;

with 语句主要场景是针对一个对象反复操作

如下的 location 对象被反复的操作,这个时候将代码作用域设置为该对象能提供便利

// 浏览器环境
const qs = location.search.substring(1);
const hostName = location.hostname;
const url = location.href;

如上的代码可以这样改

with(location) {
    // 因为是在 locaton 对象作用域下,所以可以直接引用其成员
    const qs = search.substring(1);
    const hostName = hostname;
    let url = href;
    // 瞧瞧,这多方便呐
}

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

但是严格模式下不能使用 with 语句,会报错 ❌, 也通常不推荐使用 with 语句

switch 语句

js 中的 switch(value: any) 语句的 value 为 任意类型,因此不止是 数组、还可以是字符串、boolean 值,甚至是对象;

注意 ⚠️: switch 语句在比较每个条件的值时会使用全等操作符,因此不会强制转换数据类型(比如 字符串 “1” 不会匹配到数值 1)

const v1 = 1;
const v2 = 2;

const numSwitch = (num) => {
  switch (num) {
    case 2:
      log("v2: ", num);
      break; // break 表示 命中 一个 case 之后就不在往下执行了(就跳出 switch 块)
    case 1:
      log("v1: ", num);
      break;
    default:
      log("not match v1 & v2: ", num);
  }
};

numSwitch(v1); // log v1:  1
numSwitch(v2); // log v2:  2
numSwitch(3); // log not match v1 & v2:  3

const obj1 = {
  v: 1,
};

const obj2 = {
  v: 2,
};

objSwitch = (obj) => {
  switch (obj) {
    case obj1:
      log("obj1 case ", obj1);
      break;
    case obj2:
      log("obj2 case ", obj2);
      break;
    default:
      log("other ", obj);
  }
};

objSwitch(obj1); // log: obj1 case  { v: 1 }
objSwitch(obj2); // log: obj2 case  { v: 2 }
objSwitch({ key: "value" }); // log: other  { key: 'value' }