Ваш код будет извлекать значение свойства length и попытаться преобразовать его в логическое значение для целей теста if/then
, но это вызовет ошибку, если значение будет null
.
Кроме того, если ваш тест просто: app.subject.name
, вы получите ложный положительный результат, если значение случается, falsy значение, как 0
или false
, которые оба являются совершенно допустимыми значениями.
С помощью строчек простейшим тестом является проверка непустой строки и непустой. Если это значение было предоставлено конечным пользователем, рекомендуется сначала вызвать .trim()
в строке, чтобы удалить любые начальные или конечные пробелы, которые могут быть случайно добавлены.
var myObj = {
test : 0,
testing : null
}
// This will fail with an error when the value is null
/*
if(myObj.testing.length){
console.log("The testing property has a value.");
} else {
console.log("The testing property doesn't have a value.");
}
*/
// This will return a false positive when the value is falsy
if(myObj.test){
console.log("The test property has a value.");
} else {
console.log("The test property doesn't have a value."); // <-- Incorretly reports this
}
// This explicit test will pass and fail correctly
if(myObj.testing !== "" && myObj.testing !== null){
console.log("The testing property has a value.");
} else {
console.log("The testing property doesn't have a value.");
}
Кроме того, если значение есть, поместите код в if
правда отрасли и не беспокоиться о return false
.
categories.fetch = function(app){
if(app.subject.name !== "" && app.subject.name !== null) {
var p =
Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
Но свойство length из 0 является ложным, поэтому '! Object.length' - это всего лишь короткий код для проверки того, является ли это'> 0' – Connum
. Это также вызовет 'undefined'' TypeError' в случае, если 'name' doesn 't существует на 'app.subj ect'. – Pineda
Конечно, будет. Это произойдет в любое время, когда вы проверите свойство, которого не существует. Это как сказать, что 'sdlfj = 894 # $ @ $% $. [] {} {' Будет вызывать синтаксическую ошибку. –