有没有办法确定我的对象方法是不是函数

我有一个函数,它遍历一个对象数组并返回一个模板文字,它获取一个属性值(名称)和一个作为函数方法的属性值(这是 .move / 他们将采取多少步骤) .move方法使用 math.random 选择随机数量的步骤并返回该值。但是,在某些对象中,移动属性被定义为整数,例如 1 或 2,而不是随机数。


有没有办法更改我的fitnessTest函数,以便它同时接受.move()和.move?


我尝试在我的 while 语句中使用 if else 语句说


while (steps <= 20) {

  if (typeof arrayObject == function) {

    steps += arrayObject[i].move();

    turns++;

  } else

    steps += arrayObject[i].move;

    turns++;

它返回将 .move 值正确定义为整数的对象,但不会为具有 .move() 的对象返回随机数。


function fitnessTest(arrayObject){

  let turnsArray = [];

  for (i = 0; i < arrayObject.length; i++){

    let steps = 0;

    let turns = 0;

    while (steps <= 20){

      steps += arrayObject[i].move();

      turns++;

    } turnsArray.push(`${arrayObject[i].name} took ${turns} turns to take 20 steps.` );

  }      return turnsArray;

}

现在,该函数将遍历一个对象数组,这些对象.move()作为一个函数生成一个随机数并返回正确的字符串,但是将 .move 设置为整数的对象只会给我一个


类型错误arrayObject[i].move不是函数


芜湖不芜
浏览 127回答 3
3回答

Qyouu

检查typeof数组元素而不是数组变量。var arr = [ { move: 10}, {move: function () {}} ];console.log(typeof arr) // objectconsole.log(typeof arr[0].move) // numberconsole.log(typeof arr[1].move) // function将您的代码更改为:while (steps <= 20) {&nbsp; if (typeof arrayObject[i].move === "function") {&nbsp; &nbsp; steps += arrayObject[i].move();&nbsp; &nbsp; turns++;&nbsp; } else&nbsp; &nbsp;if (typeof arrayObject[i].move === "number")&nbsp; &nbsp; steps += arrayObject[i].move;&nbsp; &nbsp; turns++

守着星空守着你

typeof为您提供一个字符串,因此您需要使用"". 还要比较move属性而不是对象本身。您可以根据自己的目的使用三元运算符,并且可以拥有更优雅的代码。while (steps <= 20) {&nbsp; steps += typeof arrayObject[i].move === "function" ? arrayObject[i].move() : arrayObject[i].move;&nbsp; turns++;}

斯蒂芬大帝

1.typeof返回一个字符串值,需要与 JavaScript 类型的字符串进行比较。2. 你应该测试move单个项目的属性arrayObject是否是一个函数,而不是arrayObject它本身:typeof arrayObject[i].move == 'function'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript