Javascript 当作为函数参数提供时,是否有方法在不引用对象的情况下访问对象属性?

Javascript 当作为函数参数提供时,是否有方法在不引用对象的情况下访问对象属性?,javascript,Javascript,假设您得到了一个像var obj={a:'foo',b:'bar'}这样的对象,您提供给一个函数function equal(x){return x.a==x.b} 有没有一种方法可以提供object参数作为作用域来删除函数中的对象引用,比如sofunction equal(x){returna==b} 旁注:语法最好与ECMAScript第5版配合使用 理由:问题背后的想法是涵盖对象参数包含许多属性的情况,{a:'foo',b:'bar',…,z:'baz'},这需要经常重复对象名称。如果您解

假设您得到了一个像
var obj={a:'foo',b:'bar'}
这样的对象,您提供给一个函数
function equal(x){return x.a==x.b}
有没有一种方法可以提供object参数作为作用域来删除函数中的对象引用,比如so
function equal(x){returna==b}

旁注:语法最好与ECMAScript第5版配合使用


理由:问题背后的想法是涵盖对象参数包含许多属性的情况,
{a:'foo',b:'bar',…,z:'baz'}
,这需要经常重复对象名称。

如果您解释了为什么需要它以及您试图解决的问题,如果只是语法问题,您可以使用解构参数:


函数相等({a,b}){
返回a==b;
}
console.log(相等)({
答:1,,
b:1

}));假设您不能做任何事情ES6,我可能会做以下事情:

function equal(a, b) {
    return a === b
}

equal(x.a, x.b);
这样,至少equal是可重用的

如果在运行时之前不知道
a
b
是什么,可以使用方括号表示法访问键

equal(x[var1], x[var2])
以编程方式从x中拾取元素是一个不同的问题,在ES6中解决了这一问题,以便使用解构轻松地读取


这看起来像是
const equal=({a,b})=>a==b

在ES6中,我们可以使用解构赋值来获得变量中键值的映射:

var obj={a:'foo',b:'bar'};
//使用ES6解构语法
函数等于({a,b}){返回a==b};
console.log(相等(obj));
obj={a:'bar',b:'bar'};

console.log(相等(obj))您还可以在对象上定义自己的属性来为您执行检查

constmyobject={a:true,b:false};
Object.defineProperty(myObject,“\u IsEqual”{
get:function(){
返回这个.a==这个.b;
}
})
控制台日志(myObject.\u IsEqual);
myObject.a=假;

控制台日志(myObject.\u IsEqual)在es6中使用分心器,它将帮助您 前

在对象中破坏的结果是相同的吗 请在“提交”中告诉我是否与您需要的相同,或者您可以使用noot更改范围:

函数相等(x){
使用(x){//尝试将任何未声明的变量作为x的属性取消引用
返回a==b;//隐含的x.a==x.b
}
}
log(相等({a:foo,b:bar}));

log(相等({a:baz,b:baz}))为什么?您最多只需保存几个键入字符,但会带来更多潜在的混淆-如果
x
没有
b
属性会发生什么情况?你应该从全局对象得到它吗?你在找吗
({a,b})=>a==b
@ProfessorAllman:解构作业不适用于第5版。不是吗?从技术上讲,您可以使用
with{}
语句,这对ES5是有效的,但它是:1)根本不推荐使用。2) 比实际写入更多的代码
返回x.a==x.b
。除了美学之外,还有什么好的理由吗?@VLAZ我正在考虑一个案例,其中提供的object参数包含许多键值对。在这种情况下,一次又一次地重复参数对象名会妨碍可读性。分解结构赋值是第6版plus的一项功能。请注意OP关于互操作性的旁注。该问题专门针对ECMAScript 5提出
const equal = ({a, b}) => a === b