JavaScript - 为什么添加赋值运算符不按预期工作?

时间:2016-01-18 10:40:13

标签: javascript animation

我目前正在使用一些动画来增强网站。

我试过这段代码:

// Opacity is 0 in the beginning. Set 
//  in CSS. 
// 1. Parameter: Boolean - true if making the
//  element visible; false if making it vanish.
// 2. Parameter: Object

var changeOpacity = function(direction, element) {
  var css = element.style;
  var goStep = function(signedStep) {
    css['opacity'] += signedStep;
    changeOpacity(direction, element);
  };

  if (direction) {
    if (css['opacity'] < 1.0) {
      setTimeout(function() {
        goStep(0.1);
      }, timeStep);
    }
  } else {
    if (css['opacity'] >= 0.1) {
      setTimeout(function() {
      goStep(-0.1);
  }, timeStep);
    } else {
      css['display'] = 'none';    
    }
  }
};

它还没有奏效。

我在代码中写了几个console.log:&#39; opacity&#39;在作业完成后总是保持在0.1。

我的预期是:0.0 - 0.1 - 0.2 - 0.3 ......

现在我使用这段代码:

// ...
var goStep = function(signedStep) {
  css['opacity'] = +css['opacity'] + signedStep;
  changeOpacity(direction, element);
};
// ...

工作正常。 但我仍然想知道为什么使用组合赋值加法运算符失败。

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

您正在使用Number添加字符串,因此在第一种情况下,您实际上是连接值

见这里:https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Addition_assignment

第二个方法有效,因为您要将css['opacity']转换为数字:+css['opacity']

试试这个:

    var test = "0.1",
    test2 = "0.1";
    signedStep = 0.1;

    test += signedStep;
    alert(test+" is a "+typeof test);
    test2 = +test2 + signedStep;
    alert(test2+" is a "+typeof test2);

答案 1 :(得分:0)

css['opacity']是一个字符串。如果向字符串添加数字,它会将数字转换为字符串并连接两个最终字符串。

css['opactity'] = 0.1
css['opacity'] += 0.5 // => "0.10.5"