当你无法比较两个物体时该怎么办?

时间:2017-12-02 05:48:40

标签: javascript javascript-objects

我对编程非常陌生,并且自己学习了一个月左右。我没有走得太远,我最近尝试编写一个简单的程序来获取当前月份和日期,检查当前月份和日期是否与数组中的元素匹配,如果是这样,我就遇到了绊脚石将字符串记录到控制台。

我得到的错误只是"未定义的对象"。我想我做错了是试图比较两个对象?有没有办法将我想要比较的值转换为值,以便可以使用布尔运算符?代码如下。

var currentMonth = new Date().getMonth();
var currentDay = new Date().getDate();

var royalMonths = months: [ 2, 11, 6, 8, 9, 1, 5, 7 ]
var royalDays = [ 6, 14, 10, 15, 21, 9, 2, 22 ]
var members = [
  "Queen Elizabeth",
  "Prince Charles",
  "Prince Philip",
  "Princess Anne",
  "Prince William",
  "Prince Harry",
  "Princess Kate"
]

if (currentMonth in royalMonths && currentDay in royalDays) {
  console.log("It's a royal birthday!");
} else {
  console.log("It's a royal unbirthday.");
}

1 个答案:

答案 0 :(得分:0)

"未定义的对象"不是一个完整的错误消息,您显示的代码也不完整,这使得帮助有点棘手。以下是使用Array.find检查数组中值的示例:



const dates = [ 1, 2, 3, 31, 29 ]
const myDate = 3
if (dates.find(d => d === myDate)) {
  console.log('Found it!')
} else {
  console.log('Nope.')
}

// Or:
if (dates.includes(myDate)) {
  console.log('Yup, it includes it.')
}




它确实取决于数组中的一些内容。简单的值稍微容易一些,所以先让它们工作然后转移到更复杂的对象。如果您需要更多详细信息,请尝试发布更完整的示例(我建议使用我在此处完成的代码段功能),以便人们可以更清楚地了解您的尝试。

编辑:现在我可以看到你的完整例子,让我们来看看一些问题。请注意,如果您查看错误消息中的行号,它们通常会为您提供有关问题所在位置的非常有力的线索。



var royalMonths = months: [2, 11, 6, 8, 9, 1, 5, 7]




运行时,会导致错误:

"Uncaught SyntaxError: Unexpected token :"

这是因为您尝试使用我们通常在对象文字中找到的语法而不使用表示对象文字的花括号。例如,这将是正确的语法:

var royalMonths = {
  months: [ 1, 2 ]
}

但是,您实际上并不需要一个物品用于您的目的。

最后,虽然这是有效的JavaScript(在ES6及更高版本中,我相信)但它并没有按照您的想法行事:

if (currentMonth in royalMonths) {

这将检查对象的属性名称,对于数组是它们的索引。因此,如果currentMonth为2且royalMonths有三个或更多元素,则会评估true。您应该尝试使用Array.includes,如上所示,您将获得更多运气。