我对javascript中的调用和应用程序有一些疑问
I have some doubts for the call and apply in javascript
function a() {
console.log(this === 1); //why it is false?
}
a.call(1);
当调用或应用该函数时,该值将被更改。orz!!
使用基元值(如字符串、布尔值)更改call
、bind
或apply
的上下文时,生成的上下文将是基元的装箱版本。
如果您将this
的值记录到控制台,您会看到它不是显示为1
,而是显示为类似Number {[[PrimitiveValue]]: 1}
的内容。
这个装箱版本是一个对象,所以===
将使用引用相等来进行比较——通常情况下,数字将按值进行比较,而不是按引用进行比较。
通过将装箱的版本传递给数字构造函数,可以创建一个安全的数字进行比较。
console.log(Number(this) === 1);
由于基元值被"装箱"(请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply)这一切都有道理。
您正在使用严格比较(===),并尝试将对象与数字进行比较。尽管您显式地"1"调用函数发送一个对象,所以第四行的"1"是一个对象。如果您尝试使用非严格比较(==),它将计算为true,因为"this"的值将被强制为数字。
相关文章:
- Rails引擎:使主机应用程序javascript可用于Mounted Engine
- Windows 8应用程序Javascript和SQlite(数据库已锁定)
- 是否有一种从应用程序Javascript代码中自动生成序列图的方法
- 未捕获的语法错误:) 在 MVC 应用程序 JavaScript asp.net 参数列表后丢失
- 如何将excel文件导入Web应用程序(javascript/d3/html)
- 检查是否没有Internet连接-弹出-Windows 10应用程序(Javascript)
- 如何在WinRT应用程序(Javascript、C#)中区分Windows Phone 8.1和Windows 8.1
- jQuery Mobile Windows应用商店应用程序:JavaScript运行时错误:无法获取属性'ind
- Web应用程序Javascript,用于处理来自iOS设备摄像头的信息流(不是应用程序!)
- 在构建应用程序Javascript MVC的过程中,score/buildjs抛出了一个没有解释的错误
- Iframe应用程序JavaScript SDKpublish对话框错误(代码102)
- 如何在windows8商店应用程序(javascript)中播放youtube视频
- AJAX应用程序JavaScript加载问题
- 用于在纯客户端测试应用程序(javascript/jquery)中维护状态和管理i/o的体系结构
- 来自IOS本机应用程序JavaScript函数调用
- 添加必应地图到Windows Phone 8.1应用程序(javascript)
- 消息对话框用户选择Metro应用程序- JavaScript
- 天气应用程序Javascript无法工作
- 需要的应用程序(JavaScript混淆器)
- 我可以在WinRT应用程序(javascript)中使用Sqlite吗?