2015-10-11 4 views
0

Итак, у меня есть самая странная проблема, которую я не могу понять (или не знал) между моей локальной средой и производственным сервером.Разница между javascript в зависимости от базовой ОС/reactJs

В моем локальном окружении запускаются окна, а мой производственный сервер - это цифровой океанский дистрибутив ubuntu. Мой Javascript может сравниться с этим:

У меня есть эта конструкция (упрощенный):

var myClass = React.createClass({ 
    getInitialState: function(){ 
     return { number: 1 }; 
    }, 
    doSomething: function(numIn){ 
     this.setState({ number: this.state.number + numIn }); 
    }, 
    render: function(){ 
     return(
      <div>{this.state.number}</div> 
     ); 
    } 
}); 

Давайте предположим, что myClass.doSomething вызывается с 1, поэтому ожидается, состояние будет 1 + 1 = 2. На мой местная среда (окна) будет выводить то, что вы ожидаете:

<div> {this.state.number} </div> => <div>2</div> 

Все хорошие денди. На моем Ubuntu дистрибутивах это немного напуганный, хотя, это будет concatinate его вместо этого, так же вход будет выход:

<div>12</div> 

Теперь я понимаю, что я могу использовать ParseInt или parseFloat вокруг каждого добавления (который я предполагаю, что я должен все равно), но он загромождает код и раздражает. В стороне, я не понимаю, почему базовая ОС имеет какое-либо отношение к этому, javascript, безусловно, работает в браузере клиентов?

Как я пишу это, мне кажется, что это может быть мой ответ от бэкэнд, который первоначально возвращает номер как JSON. Может ли интерпретация этого значения отличаться в зависимости от ОС? поэтому на ubuntu это будет строка изначально, и, следовательно, javascript увидит строку + number = string?

+0

Где происходит '' '? Можете ли вы отследить его, скажем, файл или базу данных? Сохраняется ли она в одной и той же форме в обеих средах? – joews

+0

Почему это происходит, я не могу сказать наверняка, но это не имеет значения. Динамическое типирование означает, что если вы хотите указать тип и убедиться, что операция выполняется так, как вам нужно, действительно важно использовать функции преобразования, такие как 'parseInt', даже если это уродливо. Тем не менее, откуда взялось 'numIn'? – CollinD

+1

numIn исходит из базы данных, где она определена как bigInt. Состояние изначально заполнено запросом ajax, где ответ такой: {number: "1"} Edit: это была ложь, мой конвертер $ arr -> json принимает int и разбивает кавычки на нем, без меня говоря это. Я предполагаю, что это происхождение. Тем не менее, я не понимаю, как это отличается от базовых ОС? – Dennis

ответ

0

Решение этой проблемы заключалось в том, чтобы всегда использовать соответствующие версии синтаксического анализа примитивов в javascript, поскольку окна и linux по-разному возвращают эти значения (с кавычками или без них).