我正在尝试学习JavaScript并且我坚持完成一项任务(获得alice和billy之间的年龄差异)。我写了下面的代码,但是我收到了一个错误:
哎呀,再试一次。确保调用ageDifference函数。
// Our person constructor
function Person (name, age) {
this.name = name;
this.age = age;
}
// We can make a function which takes persons as arguments
// This one computes the difference in ages between two people
var ageDifference = function(person1, person2) {
return person1.age - person2.age;
}
var alice = new Person("Alice", 30);
var billy = new Person("Billy", 25);
// get the difference in age between alice and billy using our function
var diff = ageDifference("Alice", "Billy");
答案 0 :(得分:2)
您正在将名称传递给函数,您需要传递对象。
var alice = new Person("Alice", 30);
var billy = new Person("Billy", 25);
// get the difference in age between alice and billy using our function
var diff = ageDifference(alice, billy);
让我们再谈谈你的第一种方法错误的原因。我们都已经开始编程,并且可以理解为什么你将字符串传递给函数,首先让我们来看一下方法签名。
function ageDifference( Person person1, Person person2 )
注意:这不是JavaScript表示法,因为它不能显式声明参数类型,因为它不是静态类型语言,但我们可以假设创建此函数以接受{{1对象。
高级Person
可能如下所示:
Person
当您创建var Person = function(name, age) {
this.name = name;
this.age = age;
}
和bob
alice
时,意味着您在constructed
对象的内存中创建了一个新实例。你传递了一个字符串作为他们的名字和一个年龄的整数。在内存中,我们现在可以假设当前范围内存在以下变量。
Person
^这说明存在两个对象与其数组键关联的不同值。这可能是最重要的一步,您现在可以通过访问这些键来对两个对象进行比较,例如:
var alice[ name: "Alice", age: "25" ];
var bob [ name: "Bob", age: "30" ];
等同于
bob.age - alice.age = 5
了解这一点,我们现在可以理解为什么您解决问题的第一种方法是给您错误。根据定义,字符串是一个字符数组,因此您无法执行该类型不存在的方法,例如30 - 25 = 5
。
我还注意到,如果你作为第一个人通过比利,你现在可以得到负面的差异,为了解决这个问题,你应该找到最小年龄并从最大值中减去它。
.age
我希望这会有所帮助。
答案 1 :(得分:0)
您将字符串传递到ageDifference()
,您需要传递alice
和billy
个实例
// Our person constructor
function Person(name, age) {
this.name = name;
this.age = age;
}
// We can make a function which takes persons as arguments
// This one computes the difference in ages between two people
var ageDifference = function(person1, person2) {
return person1.age - person2.age;
}
var alice = new Person("Alice", 30);
var billy = new Person("Billy", 25);
// get the difference in age between alice and billy using our function
var diff = ageDifference(alice, billy);
console.log(diff);
答案 2 :(得分:0)
像这样定义你的函数以避免负面差异
function ageDifference(p1, p2)
{
return p2.age < p1.age ? p1.age - p2.age : p2.age - p1.age;
}
创建人物对象:
var alice = new Person("Alice", 30);
var billy = new Person("Billy", 25);
并找到差异:
var diff = ageDifference(alice, billy);