2012-02-13 60 views
0

赋值给HTMLElement#style的未定义属性的返回值是否保证与赋值相同?对HTMLElement#风格的未定义属性赋值的返回值是否保证与赋值相同?

更一般地说,赋值给(声明的或未声明的)主机对象的属性总是保证返回相同的赋值?如果不是,风格属性是否安全?

换句话说,这是安全的吗?

var node = document.getElementById("#foo"); 
node.style.WebkitTransition = 
    node.style.MozTransition = 
    node.style.OTransition = '0.4s all linear'; 

回答

1

是的,你的例子是安全的。根据ECMA-262 spec,赋值表达式总是返回表达式右边的值。你的榜样将被评估为:

// original 
node.style.WebkitTransition = 
    node.style.MozTransition = 
    node.style.OTransition = '0.4s all linear'; 
// step 1 
node.style.WebkitTransition = 
    node.style.MozTransition = 
    ('0.4s all linear'); 
// step 2 
node.style.WebkitTransition = 
    ('0.4s all linear'); 

由于这是语言规范的一部分,我不会期望它重要的任务的左边是什么类型的对象或变量。

+0

这听起来对我来说是正确的。在第11.13.1节(简单赋值)中,最后一步是'Return rval.'所以只要在该步骤之前没有抛出异常,看起来结果保证与右边的值相同。 – 2012-02-13 08:39:18

0

是的,上述方法是安全的。你基本上只是链接var分配。这就如同说

var c = 'value'; 
var b = c; 
var a = b; 

console.log(a) => 'value' 
+0

但它不一定相同,因为这些是主机对象的属性。或者是? – 2012-02-13 06:20:50

+0

最终结果是相同的,因为分配的值将覆盖链中所有存在/未定义的属性。 – 2012-02-13 06:47:27

+0

主机对象可能使用的值不是您尝试分配的值吗?在那种情况下,表达式的那部分会导致主机对象选择的值,还是您尝试分配的值? – 2012-02-13 07:01:32