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' }