首页 > 编程笔记
JS with语句及其替代方案
JavaScript 中有一个特殊的 with 语句,可以指定一个对象,在 with 语句块中,可以直接访问对象中的属性,无须反复使用对象名加
不过 with 语句已经被标记为过时了,并且无法在严格模式下使用,这里将介绍一下它的基本用法和替代语法。
with语句的结构如下:
如果只想访问 dept 中的属性,则可以把 emp.dep t这个对象传递给 with 作为参数,代码如下:
使用 with 语句会造成代码不易阅读,例如当语句块中访问的属性不存于 with 的参数对象中时,会到上一层作用域寻找,这时就不容易分清是不是访问了对象中的属性,另外这种寻找也会影响性能。
对于 with 的替代语法,可以把中间对象保存到一个临时变量中再访问,以减少重复,代码如下:
.
号访问。不过 with 语句已经被标记为过时了,并且无法在严格模式下使用,这里将介绍一下它的基本用法和替代语法。
with语句的结构如下:
with(obj){
//语句
}
{}
中的代码可以直接访问它的属性,假如有一个员工对象,里边包含员工姓名和部门子对象,部门子对象中有部门名称和部门经理,代码如下:
let emp={ name:"张三", dept:{ name:"信息技术部", manager:"李四", }, };如果要访问 emp 中的 name 属性和 dept 中的 name 属性,使用普通方式编写的代码如下:
emp.name; emp.dept.name;使用 with 语句编写的代码如下:
with(emp){ console.log(name); //张三 console.log(dept.name); //信息技术部 }这里把 emp 传递给 with 之后,在后边的代码中可以省略
emp.
,进而可以直接访问 emp 中的属性和嵌套的属性。如果只想访问 dept 中的属性,则可以把 emp.dep t这个对象传递给 with 作为参数,代码如下:
with(emp.dept){ console.log(name); //信息技术部 console.log(manager); //李四 }可以看到代码可以省略重复编写 emp.dept.,即可以直接访问 dept 中的 name 和 manager 属性。
使用 with 语句会造成代码不易阅读,例如当语句块中访问的属性不存于 with 的参数对象中时,会到上一层作用域寻找,这时就不容易分清是不是访问了对象中的属性,另外这种寻找也会影响性能。
对于 with 的替代语法,可以把中间对象保存到一个临时变量中再访问,以减少重复,代码如下:
const dept=emp.dept; console.log(dept.name); //信息技术部 console.log(dept.manager); //李四或者使用解构赋值,可以进一步省略对象的重复引用,代码如下:
const{name:empName}=emp; const{name:deptName,manager}=emp.dept; console.log(empName); //张三 console.log(deptName); //信息技术部 console.log(manager); //李四