2015-08-08 3 views
1

Вслед за nodejs курса (NodeJS в действии - книга Мэннинга) Я видел этот кусок кодаPractice инициализировать переменную ложных

// create server 
var server = http.createServer(function(request, response){ 
    var filePath = false; 
    if (request.url == '/') { 
     filePath = 'public/index.html'; 
    } else { 
     filePath = 'public' + request.url; 
    } 
    var absPath = './' + filePath; 
    serveStatic(response, cache, absPath); 
}); 
server.listen(3000, function(){ 
    console.log('Server listening on port 3000.'); 
}); 

Мой вопрос о переменной «Filepath». Он инициализируется значением false, но позже он принимает строковые значения.

Редактор Я использую (Visual Studio Code) показывает мне предупреждение:

Тип «строка» не является присваиваемым типа «логическими»

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

Является ли эта инициализация ложной из-за чего-то? Какой-нибудь риатон? Неправильно ли предупреждение моего редактора ...? Или просто обычная практика автора.

+0

Я знаю, что это не отвечает на ваш вопрос, но почему бы не использовать пустую строку в качестве значения по умолчанию для filePath? – Aniket

+0

@Aniket Как я уже сказал, это фрагмент кода, который я взял из книги. И я также думаю, что это может быть только выбор автора. – blfuentes

+2

Это, безусловно, авторский выбор. JavaScript свободно набирается, и это не должно вызывать ошибок. Если бы я был автором, я бы использовал пустую строку консистенции типа. – Aniket

ответ

2

Нет причин для инициализации false, и в этом случае это не является хорошей практикой.

Эта линия:

var filePath = false; 

просто может быть безопасно изменен следующим образом:

var filePath; 

Это может быть сделано, потому что если/другое в следующем операторе гарантируется для инициализации filePath один путь или другой.

И, я согласен, очень странно инициализировать его бессмысленным булевым значением, которое даже не имеет соответствующего смысла для контекста. Это даже не слишком осторожно - это просто неправильно. Похоже, что кто-то думал, что все объявленные значения должны быть немедленно инициализированы (что совсем не так, потому что в Javascript undefined является совершенно значимым начальным значением в некоторых контекстах), поэтому они просто выбрали какое-то значение для его назначения.

Ваш редактор предупреждает, что для вас необычная ситуация резко переключает типы в одной переменной. Это не технически ошибка в Javascript (другими словами, это разрешено), но это также может быть индикатором ошибки кодирования, так что все, что ваш редактор говорит вам.

+0

Просто интересно, потому что пустая строка также ложна ... Я не мог найти смысл об этой инициализации в false. – blfuentes

+0

@blacai - пустая строка 'falsey' означает' if ("") 'оценивается как' false'. Это не то же самое, что «ложь». Но 'undefined' также является' falsey', который является значением, которое он имеет без инициализации, поэтому нет причин для инициализации его 'false'. – jfriend00

+0

yes Я знаю о 'false ==" "и' false === "" '. Ваше объяснение было очень ясным. – blfuentes

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