有没有一种方法可以确定我的对象方法是否是函数

时间:2019-09-12 06:36:16

标签: javascript object methods

我有一个遍历对象数组并返回模板文字的函数,该模板文字获取属性值(名称)以及作为函数方法的属性值(这是.move /它们将执行多少步骤) .move方法使用math.random选择随机步数并返回该值。但是,在某些对象中,将move属性定义为整数,例如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的类型错误不是函数

3 个答案:

答案 0 :(得分:0)

1。typeof返回一个字符串值,您需要与JavaScript类型的字符串进行比较。

2。 您应该测试move的单个项目的属性arrayObject是否是一个函数,而不是arrayObject本身:

typeof arrayObject[i].move == 'function'

答案 1 :(得分:0)

检查typeof数组元素,但不检查数组变量。

var arr = [ { move: 10}, {move: function () {}} ];
console.log(typeof arr) // object
console.log(typeof arr[0].move) // number
console.log(typeof arr[1].move) // function

将代码更改为:

while (steps <= 20) {
  if (typeof arrayObject[i].move === "function") {
    steps += arrayObject[i].move();
    turns++;
  } else   if (typeof arrayObject[i].move === "number")
    steps += arrayObject[i].move;
    turns++

答案 2 :(得分:0)

const utils = eval(environment.utils)(); const text = utils.testPackage.generateRandomText(); const username utils.testPackage.generateUsername(); 为您提供了一个字符串,因此您需要使用typeof将其与字符串等同。还要比较""属性而不是对象本身。

您可以将三元运算符用于您的目的,并且可以使用更优雅的代码。

move