微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Javascript数组函数参数传递

如何解决Javascript数组函数参数传递

我正在看一个 javascript 教程,但我不懂一些语法。他正在教授增强的对象属性,我不明白接下来的两件事: 你可以看到他创建了一个变量(pricePropName 的值为“PRICE”。为什么他设置了 price 值,为什么它是大写的并且在两个引号之间?这两个点有什么作用(数组 PricePropName.toLowerCase 之后的那些点) ? 为什么他在数组之后以这种方式传递变量? 很抱歉这个菜鸟风格的问题,但我没有在任何地方找到它,我想了解它)

代码

const pricePropName = "PRICE";

const calculator = (name,price) => {
  return {
    name,add(n1,n2) {
      return n1 + n2;
    },[pricePropName.toLowerCase()] : price;
  }
}

const calc = calculator('casio',19.99);

log(calc.name);
log(calc.add(20,20));
log(calc.price);

解决方法

为什么他设置了价值价格,为什么它是大写的并且在两个引号之间?

他只是声明了一个名为 pricePropName 且值为 "PRICE" 的字符串。这两个引号只是您声明字符串文字的方式。至于为什么它是大写的,没有特别的原因,但可能是因为他可以稍后调用 toLowerCase() 方法。有关字符串的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

那两个点有什么作用

在这里,他声明了一个对象字面量object 是键值对,因此 : 之前的内容是 key(或您访问值的方式),: 之后的内容是价值(您访问的内容)。

所以如果我像这样声明一个对象:

const obj = {
    "one": 1
}

我有一个对象 obj,带有 1 个键 "one" 和一个关联值 1。要访问该值,我可以执行 obj.oneobj["one"]

对象中的键总是字符串,但您不必将它们用引号括起来。我可以像这样声明前一个对象:

const obj = {
    one: 1
}

在现代 javascript 中,有一个简写,如果您有一个变量并将其添加到对象文字中,如果您想使用变量的名称作为键,则不需要声明键。所以,我也可以像这样声明前一个对象:

const one = 1;
const obj = {
    one
}

最后要理解的是 [pricePropName.toLowerCase()] 周围的方括号。因为他在这里调用一个方法 (toLowerCase()),所以他通常不能将它用作对象键,但是通过将它包装在 [] 中,有点像说“这样做,然后以结果为关键”。

语法有点笨拙,所以我不推荐它 - 为了可读性,将其分解为变量要清晰得多。

所以,最后:

const calculator = (name,price) => {
  return {
    name,add(n1,n2) {
      return n1 + n2;
    },[pricePropName.toLowerCase()] : price;
  }
}

是一个名为 calculator 的函数,它接受两个参数 nameprice,并返回一个具有 3 个键/值属性的对象字面量:

  1. name,在本例中指的是 "casio"
  2. add,指的是将2个数字相加并返回结果的函数
  3. price,在本例中指的是 19.99

最终对象将如下所示:

{
    "name": "casio","add": function(n1,n2) {
        return n1 + n2
    },"price": 19.99
}
,

您基本上可以通过几种不同的方式调用/定义对象属性。

下面有示例,说明如何以不同方式执行此操作(所有方法都相同):

const city = "Wroclaw"
const country = "Poland"

const example = {
   name: "Bob",['lastName']: "Smith",['AGE'.toLowerCase()]: 24,city,country: country
}

console.log(example)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。