javascript - 为什么从绑定函数返回的 `this` 不严格等于传递的原始值?
问题描述
我注意到this
从绑定函数返回的值并不严格等于绑定时传递的原始值。
根据MDN,调用原始函数时[[BoundThis]]
会通过。
this
绑定函数返回什么?是[[BoundThis]]
吗?
const fn = function() { return this }
const strBound = fn.bind('111')
const numBound = fn.bind(111)
const boolBound = fn.bind(true)
console.log(strBound()) // [String: '111']
console.log(strBound() == '111') // true
console.log(strBound() === '111') // false
console.log(numBound()) // [Number: 111]
console.log(numBound() == 111) // true
console.log(numBound() === 111) // false
console.log(boolBound()) // [Boolean: true]
console.log(boolBound() == true) // true
console.log(boolBound() === true) // false
解决方案
您的函数未处于严格模式,这意味着它将始终将其接收到this
的值隐式转换为对象(并在接收null
/时使用全局对象undefined
)。您的代码将按预期工作
function fn() {
"use strict";
return this;
}
请注意,没有bind
.
推荐阅读
- objective-c - 如何在 Objective-C 中模拟双重调度
- c# - 无法使用 linq 表达式,无法在 LINQ to Entities 查询中构造实体或复杂类型“”
- haskell - 尝试用矩阵编写 Levenshtein 度量的实现
- python-3.x - 如何在python中命名单个子图饼图?
- javascript - 更改反应组件中的优先级
- java - 使用拆分并从文件中的一行读取整数和字符串,但它不打印任何内容
- excel - Excel读取基于具有值范围的单元格并从不同的单元格中选择值
- r - 比较R中多个数据帧的内容
- mysql - wordpress 多实例云托管
- doctrine - Symfony4 & Doctrine:加入不起作用