Javascript [Symbol.toPrimitive](hint) 转换函数

标签 javascript function type-conversion primitive

在JS中函数属于对象类型。可以使用 [Symbol.toPrimitive](hint) 将对象转换为基本类型。这种纯对象转换工作正常:

let obj = {
  [Symbol.toPrimitive](hint) {
    switch(hint) {
      case "string": return "all right";
      case "number": return 100;
      default: return "something else";
    }
  }
};

alert(obj); // all right
alert(+obj); // 100

但是,函数转换有些问题:

function fun() {
  [Symbol.toPrimitive](hint) { // JS engine starts to complain here
    switch(hint) {
      case "string": return "all right";
      case "number": return 100;
      default: return "something else";
    }
  }
}

alert(fun);
alert(+fun);

我在这里错过了什么?如何将函数转换为某种原始类型?

最佳答案

您需要处理函数的 Symbol.toPrimitive 属性并分配一个函数。

否则,您将使用一个带有符号的数组并尝试用它调用一个不存在的函数。

function fun() {
}

fun[Symbol.toPrimitive] = function (hint) {
    switch(hint) {
        case "string": return "all right";
        case "number": return 100;
        default: return "something else";
    }
};

console.log(fun);
console.log(+fun);

关于Javascript [Symbol.toPrimitive](hint) 转换函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57034527/

相关文章:

javascript - 链式 bluebird .then() 的奇怪执行顺序

javascript - 任何不使用 $(test).stuff(); 的理由与测试.stuff();鉴于该测试 = $ ('something' );?

c++ - 将 vector 拆分为多个数组/vector C++

C 函数指针

JavaScript 嵌套函数 : how to avoid loops

c++ - 如何在避免未定义行为的同时将任意 double 转换为整数?

python-3.x - 将 numpy.float64 列表快速转换为 Python 中的 float

javascript - 如何将JS对象添加到Sqlite数据库中

javascript - 如何仅切换翻转类(class)旁边的面板

python - Pandas .DataFrame : difference between inplace = True and assigning the same variable?