使用javascript检查obj中的属性

使用javascript检查obj中的属性,javascript,Javascript,所以我试着用开关箱来做这个,但似乎不是这样 我正在努力 switch (obj) { case hasPropertyA: console.log('hasPropertyA'); break; case hasPropertyB: console.log('hasPropertyB'); 我希望这不会影响obj.hasPropertyX,如果它收到一个真值,那么在任何case语句中都会显示控制台,但不会 有人有办法做到这一点吗?

所以我试着用开关箱来做这个,但似乎不是这样

我正在努力

switch (obj) {
    case hasPropertyA:
        console.log('hasPropertyA');
        break;
    case hasPropertyB:
        console.log('hasPropertyB');
我希望这不会影响obj.hasPropertyX,如果它收到一个真值,那么在任何case语句中都会显示控制台,但不会

有人有办法做到这一点吗?我有很多属性要检查,所以我不能只使用if(obj.hasOwnProperty(prop)){},这就是为什么我尝试switch case语句的原因,因为您使用的
switch()
错误。必须检查一个或多个变量表达式作为参数。对象将不起作用

例如,您可以执行以下操作:

var string = "hello";
switch(string) {
    case "green":
        // do something
        break;
    case "hello":
        // do something
        break;

     // and so on...
}

如果您有一个属性列表,并且将它们存储在一个数组中,则可以遍历该数组并检查是否定义了每个属性:

var properties = ["propertyA", "propertyB", "etc."];
for(var i = 0; i < properties.length; i++) {
    if(obj[properties[i]] != undefined) {
        console.log("Has property: " + properties[i]);
    }
}
var properties=[“propertyA”、“propertyB”等];
对于(var i=0;i
您可以在JSFiddle.net上看到一个。您使用的
switch()
错误。必须检查一个或多个变量表达式作为参数。对象将不起作用

例如,您可以执行以下操作:

var string = "hello";
switch(string) {
    case "green":
        // do something
        break;
    case "hello":
        // do something
        break;

     // and so on...
}

如果您有一个属性列表,并且将它们存储在一个数组中,则可以遍历该数组并检查是否定义了每个属性:

var properties = ["propertyA", "propertyB", "etc."];
for(var i = 0; i < properties.length; i++) {
    if(obj[properties[i]] != undefined) {
        console.log("Has property: " + properties[i]);
    }
}
var properties=[“propertyA”、“propertyB”等];
对于(var i=0;i

您可以在JSFiddle.net上看到一个开关。

有一种方法,您可以使用接近当前使用方式的开关。使用布尔语句作为开关,如下所示:

var car = {
 style: "volvo",
    type: "sport"
}

function checkObjectProperties(obj) {
    switch (true) {
    case (obj.hasOwnProperty("style")):
        console.log("has: property style")
        break;
    case (obj.hasOwnProperty("type")):
        console.log("has property type");
}}
但是请记住,switch case将在任何true语句第一次出现时中断。在这种情况下,它将在第一种情况下中断,并且永远不会进入第二种情况,即使它也等于true


最后也要始终使用默认大小写来捕获任何不会有任何真实大小写的对象。

有一种方法,您可以使用接近当前使用方式的开关。使用布尔语句作为开关,如下所示:

var car = {
 style: "volvo",
    type: "sport"
}

function checkObjectProperties(obj) {
    switch (true) {
    case (obj.hasOwnProperty("style")):
        console.log("has: property style")
        break;
    case (obj.hasOwnProperty("type")):
        console.log("has property type");
}}
但是请记住,switch case将在任何true语句第一次出现时中断。在这种情况下,它将在第一种情况下中断,并且永远不会进入第二种情况,即使它也等于true


最后也要始终使用默认大小写来捕获任何不会有任何真实大小写的对象。

switch
仅用于相等性测试,而不是真实性测试。如果你有许多属性-将它们存储在一个数组中。从语法上讲,switch语句不会在if上为你节省很多行。查看它,看看是否有一种方法可以通过循环实现。您考虑的是具有模式匹配的语言,而不是Javascript。您的所有对象都存储在数组或类似数组中吗?
switch
仅用于相等性测试,而不是truthy测试。如果你有许多属性-将它们存储在一个数组中。从语法上讲,switch语句不会在if上为你节省很多行。看看它,看看有没有一种方法可以通过循环来实现。你想的是模式匹配语言,而不是Javascript。你的所有对象都存储在数组或类似的东西中吗?谢谢你的解释,但我需要检查一个对象,它有我从请求中获得的其他属性,而不是检查这个对象是否有一些属性,认为这种方式行不通;(((@wtkd是的,确实如此。你迭代了所有要放在假想的“开关”块中的字符串。我不太明白。为什么你不能将请求转换为JS数组,并遵循此方法?啊,我现在知道了!是的,这将非常有效,谢谢!谢谢你的解释,但我需要检查一个具有其他属性的对象我从一个请求中得到,然后检查这个obj是否有一些属性,认为这种方式不起作用(((@wtkd是的,是的。你迭代了所有要放在假想的“开关”块中的字符串。我不太明白。为什么你不能将请求转换为JS数组,并遵循此方法?啊,我现在知道了!是的,这真的很有效,谢谢!