Javascript 运算符对for循环中的所有键显示true
我正在将一些数据加载到页面中,然后对其进行迭代。我只希望某些键可以明显地附加到页面上。(其他的应该附加在隐藏的输入中。)似乎if语句正在检查对象中的任何值的任何键是否为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
//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
非常重要。谢谢。我会把它放在我的后口袋里。:)