【问题标题】:Square Brackets for String in Javascript [closed]Javascript中字符串的方括号[关闭]
【发布时间】:2023-03-05 23:18:01
【问题描述】:

我不明白为什么我需要在下面的“account”变量周围添加方括号,因为“accounts”变量构成了一个字符串。

 export default {
  name: 'App',
  data () {
   return {
    web3: null,
    account: null,
    contractInstance: null
   }
 },
 mounted () {
  web3Cont().then((res) => {
   this.web3 = res
   this.contractInstance = new this.web3.eth.Contract(contractAbi, contractAddress)
   this.web3.eth.getAccounts().then((accounts) => {
    [this.account] = accounts
  })
 }

【问题讨论】:

  • 这能回答你的问题吗? Array destructuring in JavaScript
  • 谢谢 user120242。是的,我知道解构,但正如我在下面答案的评论中所解释的那样,我认为accounts变量不可能是一个数组(尽管变量是复数,可能是出于遗留原因),因为这构成了当前登录到 MetaMask 的帐户(应该是唯一的)(打印 accounts 变量也会打印单个帐户)。
  • docs.metamask.io/guide/accessing-accounts.html "如果返回数组中的第一个账号不是你期望的账号,你应该通知用户!以后,accounts数组可能包含多个账号。但是,数组中的第一个帐户将继续被视为用户的“选定”帐户。”
  • 谢谢user120242!我错过了。
  • 看到它是什么之后,我有点惊讶它没有多个帐户。无论是与钱包集合、浏览器用户配置文件还是 dApp 集合相关,默认显式支持多个帐户是有意义的

标签: javascript nodes ethereum metamask


【解决方案1】:

从名字来看,我猜getAccounts 返回多个 帐户,大概是一个数组(或者至少是某种可迭代的)。如果没有[],则将该数组分配给this.account虽然[],您正在使用解构从数组/可迭代中挑选出第一个帐户。

这是一个更简单的例子:

const accounts = ["a", "b", "c"];
let variable1;
let variable2;

variable1 = accounts;
console.log(typeof variable1, variable1); // "object" ["a", "b", "c"]

[variable2] = accounts;
console.log(typeof variable2, variable2); // "string" "a"

我怀疑您可能需要除 getAccounts 之外的其他 API,它返回符合某些条件的单个帐户。

【讨论】:

  • 谢谢 T.J.克劳德。虽然,正如您所说,该函数以复数形式称为 getAccounts,但我从逻辑上认为应该始终有一个帐户一次登录(在打印出 accounts 变量时,我也获得了一个帐户)。也许,在某些情况下可能不止一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2018-12-26
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多