Javascript 运算符对for循环中的所有键显示true

Javascript 运算符对for循环中的所有键显示true,javascript,Javascript,我正在将一些数据加载到页面中,然后对其进行迭代。我只希望某些键可以明显地附加到页面上。(其他的应该附加在隐藏的输入中。)似乎if语句正在检查对象中的任何值的任何键是否为true,而不仅仅是循环中的特定键和值。不管怎样,这就是不起作用的地方 //example data var yaml = {"title": "blog", "author": "John Doe", "layout": "blog.hbt", "url": "my-blog", "date": "10-2-2015"}; f

我正在将一些数据加载到页面中,然后对其进行迭代。我只希望某些键可以明显地附加到页面上。(其他的应该附加在隐藏的输入中。)似乎if语句正在检查对象中的任何值的任何键是否为true,而不仅仅是循环中的特定键和值。不管怎样,这就是不起作用的地方

//example data
var yaml = {"title": "blog", "author": "John Doe", "layout": "blog.hbt", "url": "my-blog", "date": "10-2-2015"};

function addYaml(data) {
    for (var key in data) {
        if (key == 'title'||'author'||'layout') {
            var type = 'text';
            var label = "<label>"+key+"</label>";
            $('#input').append(label+'<br />');
            }
            else{var type = 'hidden';}

            var input = "<input type='"+type+"' name='"+key+"' value='"+data[key]+"' />";
            $('#input').append(input+'<br />');
        }
    }

addYaml(yaml);
//示例数据
var yaml={“标题”:“博客”,“作者”:“John Doe”,“版面”:“blog.hbt”,“url”:“我的博客”,“日期”:“10-2-2015”};
函数addYaml(数据){
for(var输入数据){
if(键==“title”| |“author”| |“layout”){
变量类型='text';
var label=“”+键+”;
$(“#输入”).append(标签+”
); } else{var type='hidden';} var输入=”; $('#input')。追加(input+'
'); } } addYaml(yaml);
它会附加所有内容(从不应用隐藏属性)。无论键是否为“title、author或layout”。

(键==“title”| |“author”| |“layout”)
对于您的情况无效,它将始终返回
title
逻辑或短路,并且任何非空字符串都是真实的。因此,您所做的基本上是
(key==“title”| | true)
。将其更改为单独检查

if (key == 'title' || key == 'author' || key == 'layout') { 

您还可以使用如下语法:

// Near the top of the function
var targets = ["title", "author", "layout"];

// Later on:
if (targets.indexOf(key) !== -1) {
  // A valid target
}

回答:
(键=='title'| |'author'| |'layout'){
=>
(键='title'| |键=='author'| |键=='layout')){
非空字符串总是真的,所以
'author'=>true
。它的js…不是一种自然的编程语言:)打开控制台,查看语法错误。它是有效的语法,只是不做用户认为它做的事。我知道这对我来说是件愚蠢的事。(facepalm)@TDave00发生在每个人身上。@Tushar,编辑是正确的。如果键不是标题,它将转到真实的部分。@Tushar我想你把
key=='title'
'title'
混淆了,你上次的编辑是不正确的,并且改变了答案的含义,如
(key=='title')
并不总是正确的。结尾的
| | true
非常重要。谢谢。我会把它放在我的后口袋里。:)