如何在JavaScript中检查对象中是否存在值
我的angular factory服务中有一个函数来获取一些数据。在使用对象之前,如何检查对象内部是否存在某个值 这就是我一直在尝试的如何在JavaScript中检查对象中是否存在值,javascript,angularjs,object,Javascript,Angularjs,Object,我的angular factory服务中有一个函数来获取一些数据。在使用对象之前,如何检查对象内部是否存在某个值 这就是我一直在尝试的 categories.fetch = function(app){ if(!app.subject.name.length){ return false; } var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()}); } 因此,我只
categories.fetch = function(app){
if(!app.subject.name.length){
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
因此,我只想在restanguar
调用中使用app.subject.name
之前检查一下它是否有值
感谢您的代码将检索长度属性的值,并尝试将其转换为布尔值,以便进行
if/then
测试,但如果该值恰好为null
,则会引发错误
此外,如果您的测试只是:app.subject.name
,那么如果该值恰好是一个虚假的值,例如0
或false
,则您将得到一个假阳性,这两个值都是完全有效的值
对于字符串,最简单的测试是检查非空字符串和非空字符串。如果该值是由最终用户提供的,最好首先调用字符串上的.trim()
,以删除可能无意中添加的任何前导或尾随空格
var myObj={
测试:0,
测试:空
}
//当值为空时,此操作将失败并出现错误
/*
if(myObj.testing.length){
log(“测试属性有一个值。”);
}否则{
log(“测试属性没有值。”);
}
*/
//当值为falsy时,这将返回假阳性
if(myObj.test){
log(“测试属性有一个值。”);
}否则{
console.log(“test属性没有值”);//您的代码将检索length属性的值,并尝试将其转换为布尔值,以便执行if/then
测试,但如果该值恰好为null
,则会引发错误
此外,如果您的测试只是:app.subject.name
,那么如果该值恰好是一个虚假的值,例如0
或false
,则您将得到一个假阳性,这两个值都是完全有效的值
对于字符串,最简单的测试是检查非空字符串和非空字符串。如果值是由最终用户提供的,最好先调用字符串上的.trim()
,以删除可能无意中添加的任何前导或尾随空格
var myObj={
测试:0,
测试:空
}
//当值为空时,此操作将失败并出现错误
/*
if(myObj.testing.length){
log(“测试属性有一个值。”);
}否则{
log(“测试属性没有值。”);
}
*/
//当值为falsy时,这将返回假阳性
if(myObj.test){
log(“测试属性有一个值。”);
}否则{
log(“测试属性没有值。”);//
方法返回一个布尔值,指示对象是否具有指定的属性
范例
var priceOfFood = {
pizza: 14,
burger 10
}
priceOfFood.hasOwnProperty('pizza') // true
priceOfFood['pizza'] // 14
priceOfFood.hasOwnProperty('chips') // false
priceOfFood['chips'] // undefined
方法返回一个布尔值,指示对象是否具有指定的属性
范例
var priceOfFood = {
pizza: 14,
burger 10
}
priceOfFood.hasOwnProperty('pizza') // true
priceOfFood['pizza'] // 14
priceOfFood.hasOwnProperty('chips') // false
priceOfFood['chips'] // undefined
简单地说:
if(!app.subject.name){
return ;
}
简单地说:
if(!app.subject.name){
return ;
}
我知道这个问题并没有问关于Lodash的问题,但我设法用它做了很多这样的检查,它工作得完美无缺。在你的情况下,它会是这样的:
categories.fetch = function(app){
if (_.isEmpty(app.subject.name)) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
categories.fetch = function(app){
if (_.isEmpty(_.get(app, "subject.name"))) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
如果您预计应用程序对象内的密钥可能不可用,您可以这样做:
categories.fetch = function(app){
if (_.isEmpty(app.subject.name)) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
categories.fetch = function(app){
if (_.isEmpty(_.get(app, "subject.name"))) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
或者简单地说:
categories.fetch = function(app){
if (!_.get(app, "subject.name")) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
我知道这个问题并没有问关于Lodash的问题,但我设法用它做了很多这样的检查,它工作得完美无缺。在你的情况下,它会是这样的:
categories.fetch = function(app){
if (_.isEmpty(app.subject.name)) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
categories.fetch = function(app){
if (_.isEmpty(_.get(app, "subject.name"))) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
如果您预计应用程序对象内的密钥可能不可用,您可以这样做:
categories.fetch = function(app){
if (_.isEmpty(app.subject.name)) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
categories.fetch = function(app){
if (_.isEmpty(_.get(app, "subject.name"))) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
或者简单地说:
categories.fetch = function(app){
if (!_.get(app, "subject.name")) {
return false;
}
var p = Restangular.all('v1/categories').getList({app.subject.name.toUpperCase()});
}
但是长度属性0是错误的,因此!object.length
只是检查它是否为>0
的一个快捷码。如果名称在应用程序.subject
上根本不存在,这也会引发未定义的类型错误。当然,这会在您检查属性时发生它不存在。这就像说sdlfj=894#$@$%$.[]{}{
将抛出语法错误。@Connum由于属性可能为null
,length
不应使用,因为在这种情况下它将抛出错误。但是length属性0是错误的,因此!object.length
只是检查它是否为>0
的一个快捷码,这也将如果name
在app.subject
上根本不存在,则抛出undefined
TypeError
。当然会。这将在您检查不存在的属性时发生。这就像说sdlfj=894#$@$%$.[]{}{
将抛出语法错误。@Connum由于属性可能为null
,length
不应使用,因为在这种情况下它将抛出错误。这如何帮助检查属性是否有值。问题不是如何检查属性是否存在。这是一个类比解释。我认为OP要求的不是检查一个值,而是一个键。OP非常清楚地说:“所以我只想在重启调用之前检查app.subject.name中是否有值。”这有助于检查属性是否有值。问题不是如何检查属性是否存在。这是一种类比解释。我认为OP的问题不是检查值,而是检查键。OP非常清楚地说:“所以我只想在restanguar调用中使用app.subject.name之前检查app.subject.name中是否有值。”正如我在其他几个答案中所指出的,如果值是像0或false这样的假值,这将抛出一个假阳性,这两个值都是有效值。它不会出现在if
语句中,因为输入值是字符串,因为表达式“0”或“false”在if
语句中是true
,这取决于测试被写入。if(“0”==tr