2013-07-04 3 views
5
  1. ложные
  2. нуль
  3. неопределенными
  4. пустая строка

Я использую их, но я до сих пор не знают о предельной разницы каждая перспектива в приведенном выше списке есть , В основном я использую 0, false. Но я столкнулся со многими сценариями, в которых используется неопределенная пустая строка. Я хочу знать точное различие между ними. Я знаю его глупый вопрос, но было бы здорово, если я получу небольшой консистентный ответ.Разница между присвоениями переменной?

+0

Пожалуйста, см. 'User2549366' answer.Помощь мне. –

+0

Я думаю, что есть лучшие ответы, чем эта ссылка. –

ответ

0

Тип - это разница.

false является булевой, 0 представляет собой число, null является объектом, undefined не определен, и '' является строкой.

Вы выбираете тип, исходя из того, что он используется. Например:

// There is nothing wrong with this block of code 
var num_cats = 7; 
if(num_cats){ 
    // num_cats is truthy 
} 

// This block works but it could be made more clear 
var has_cat = num_cats; 
if(has_cat){ 
    // This would work, but it doesn't make sense. As a developer I would 
    // expect that has_cat should be either true or false, not 7. 
    // One way to convert the number to a boolean would be: 
     has_cat = !!num_cats 
} 

Два наиболее запутанные значения falsey, вероятно null и undefined.

null в основном означает, что переменная существует, но ее значение неизвестно. undefined означает, что переменная не существует (хотя переменная может быть установлена ​​как неопределенная как var x = undefined;, а затем существует переменная x, но она явно не определена, что означает, что вы можете рассматривать ее так, как если бы она не существовала. .

2

это называется «truthy и falsy значения», если вы хотите знать, как обратиться к нему Вот ссылка, чтобы объяснить, ответ на ваш вопрос: http://www.sitepoint.com/javascript-truthy-falsy/ (Имейте в виду при чтении по ссылке в начале, что !! (значение) заставляет значение быть истинным или ложным)

+0

+1 для вашего ответа. –

0

Только два из указанных вами значений - это то, что я бы назвал обозначенным «специальным значения".

  • null - В большинстве случаев это эквивалентно неприменимо.
  • undefined - неявный версия null

Пример для обоих:

function findByTitle(arr, title) 
{ 
    for (var i = 0; i < arr.length; ++i) { 
     if (arr[i].title === title) { 
      return arr[i]; 
     } 
    } 
    return null; 
} 

Возвращаемое значение null указывает на то, что запись не может быть найден, в противном случае это объект.

function increment(x, by) 
{ 
    return x + (by || 1); // by may be undefined 
} 

increment(4); // 5 

В этом случае by аргумент не передается, поэтому JavaScript передает его в качестве undefined неявно. Я бы не рекомендовал назначать это переменной; скорее, я бы использовал null.

Другие значения, о которых вы упоминали, не особо особенны; они могут использоваться как начальное значение, например, построение строкового значения или вычисление суммы, но они не являются особыми по своему усмотрению.

  • "" является строкой
  • false является логическим
  • 0 и NaN являются числами
0

Список у вас есть являются 5 из 6 значений "falsy" в JavaScript. Если вы добавите «NaN» к этому, у вас будут все значения фальши в javascript. Таким образом, полный «falsy» список

1)0 
2)"" 
3)false 
4)undefined 
5)null and 
6)NaN 

При использовании в «если» заявление, все они ведут себя точно так же, так

if(0) 
if("") 
if(false) 
if(undefined) 
if(null) and 
if(NaN) would behave the same 

Вы просили короткий краткий ответ, но я думаю, что лучший способ показывает, как он работает с некоторым базовым тестом. Извиняюсь за долгий ответ

//Checking if all the "falsy" values evaluate the same way in a "if" statement 
console.log("Checking if(0)"); 
if(0) { 
    console.log(" if(0) Will not be reached"); 
} 

console.log('Checking if("")'); 
if("") { 
    console.log(' if("") Will not be reached'); 
} 

console.log("Checking if(undefined)"); 
if(undefined) { 
    console.log("if(undefined) Will not be reached"); 
} 

console.log("Checking if(null)"); 
if(null) { 
    console.log("if(null) Will not be reached"); 
} 

console.log("Checking if(Nan)"); 
if(NaN) { 
    console.log("if(NaN) Will not be reached"); 
} 

console.log("Checking if(false)"); 
if(false) { 
    console.log("if(false) Will not be reached"); 
} 

// Проверка, если все falsy значения равны (==) друг с другом в случае заявление

if(0 == "") { 
    console.log('if(0 == "") is true'); 
} 

if(0 == false) { 
    console.log("if(0 == false) is true"); 
} 

if("" == false) { 
    console.log('if("" == false) is true'); 
} 

if(0 == undefined) { 
    console.log("if(0 == undefined) Will not be reached"); 
} 

if("" == null) { 
    console.log('if("" == null) Will not be reached'); 
} 

if(undefined == null) { 
    console.log("if(undefined == null) is true"); 
} 

if(NaN == "") { 
    console.log('if(NaN == "") Will not be reached'); 
} 

// Проверка строго равенства между ложными и falsy значения if (undefined === false) { console.log («Не будет достигнуто»); }

if(null === false) { 
    console.log("Will not be reached"); 
} 

if(undefined ===false) { 
    console.log("Will not be reached"); 
} 

if(0 === false) { 
    console.log("Will not be reached"); 
} 

if("" === false) { 
    console.log("Will not be reached"); 
} 

if(NaN === false) { 
    console.log("Will not be reached"); 
} 

Что это означает, что, хотя эти «falsy» значения могут быть использованы в «если» заявление взаимозаменяемы, все они не равны (==) друг с другом (особенно множество 0,» «и ложно с другими тремя). Если используется более строгая равная (====), ни одна из них не будет равна false, следовательно, возможно, классификация «ложь» вместо ложной.

Смежные вопросы