Оператор ||
в Javascript как в x || y
будет оценивать первые операнды, если он правдивый или второй операнд, если первый не является правдивым. Это documented on MDN here.
truthy
в Javascript описан here on MDN. Это в принципе, ничего, кроме одного из falsey
значений, которые являются:
false
null
undefined
0
NaN
""
Таким образом, вы должны думать о ||
оператора, как то, что дело в truthy/falsey, а не в чистом Booleans.
Оператор работает так, как было указано, и сотни тысяч разработчиков научились этому и успешно его использовали. Это не чистый булев оператор. Он не обязательно возвращает логическое значение. Это отличается от некоторых других языков. Если вы хотите называть разные «странные», вы можете по-вашему. Но это то, что есть, и это всегда было в Javascript.
Легко узнать, что он делает и использовать для этого. При понимании намерений дизайна нет реальной странности или непредсказуемости ее спецификации или реализации.
Это отличается от того, что некоторые люди, приходящие с других языков, могут ожидать, но это не цель действительно любого языка. Каждый язык имеет свой собственный дизайн, который необходимо научиться правильно использовать.
этот вопрос слишком широк, поскольку JavaScript полон интересного поведения из-за его системы типов и других принципов проектирования. Например, попробуйте добавить два целых числа, которые хранятся в строках var '' 'a =" 1 "' '' и '' 'var b =" 2 "' ''. '' 'var c = a + b' '' будет '' '' 12 "' '', а не '' '3''' – luksch
, когда вы помещаете выражения js в if (выражение), это оценивается как если бы !! двойной нет. Все значения в if/while будут давать вам логическое выражение, если (1 || 2)> true и x = 1 || 2 будет хранить x = 1, –
joyBlanks
Поведение логического оператора OR не является «странностью», это [хорошо документально] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Description) ... – Teemu