JavaScript中括号的作用

5
我想了解以下内容的区别以及括号的作用:
foo.bar.replace(a,b)

并且

(foo.bar).replace(a,b)

括号中的表达式是否需要在继续执行replace方法前先进行求值?我在维护的代码中看到了这种用法,想知道它的必要性是什么? 例如:

location.hash.replace(a,b)

并且

(location.hash).replace(a,b)
1个回答

6

在您给出的示例中,此操作并非必需。

实际上,这个概念是要求括号内的块在继续执行之前被计算。

但在某些情况下,它是必需的,例如:

(new Date()).getMilliseconds()

(如@Teemu所指出的那样,在这种情况下不是真正需要的)


通常使用这个语法来避免使用临时变量..

var result = 5.3 + 2.9;
console.log( result.toFixed(1) );

可以变成
console.log( (5.3 +2.9).toFixed(1) );

如果你使用 5.3 + 2.9.toFixed(1)toFixed(1) 只会应用于 2.9,并返回一个字符串,然后将其与 5.3 连接起来。结果将是 5.32.9

我想知道什么时候需要示例。 - njorlsaga
@njorlsaga 当分组某些你希望在下一步之前发生的事情,比如计算时... (5 + 3).toString() - Gabriele Petrioli
@Gaby,感谢您的回答,我明白在调用 toFixed 方法之前需要加上括号进行计算。在我的例子中,foo.bar.replace(a,b) 中的 foo.bar 需要被转换为字符串类型。那么,如果你使用一个临时变量将其赋值给某种类型的 foo,然后执行 bar 方法,只要 foo 是正确的类型,我是否不需要使用这个临时变量呢?例如: var foo = object.prop //prop 是字符串类型; foo.bar();
或者
var foo =object.prop //prop 是函数类型 foo().bar(); // = object.prop().bar()
- njorlsaga
@njorlsaga,你的例子中第一个 foo.bar.replace(a,b) 是一个属性而不是方法,所以你不能执行它。在你后面的例子中,将对象的方法分配给变量会改变其上下文。当你执行 var foo = object.prop //prop is a function 时,foo() 是在 window 上下文中调用的,而不是在 object 上下文中调用,这意味着如果原始的 prop() 方法尝试通过 this 访问 object 的其他属性,则现在将无法找到它们。请参见以下示例:***http://jsfiddle.net/gaby/pSLax/***。 - Gabriele Petrioli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接