Javascript-为什么严格模式会使如此简单的动作如此不同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-为什么严格模式会使如此简单的动作如此不同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1541字,纯文字阅读大概需要3分钟。
内容图文
![Javascript-为什么严格模式会使如此简单的动作如此不同?](/upload/InfoBanner/zyjiaocheng/665/6b29e12307d840e5a0ee11f3a511e62d.jpg)
有一个非常简单的算法,在两种情况下,工作原理出乎意料地不同,具体取决于“使用严格”的使用.
情况1:
如果func()声明在严格模式内,则控制台日志原语
"use strict";
// strict mode is on
Object.prototype.func = function() { return this; } // do nothing with the object
console.log( (4).func() ); // 4; primitive
情况2:
如果func()声明超出严格模式,则控制台将记录相同值的对象
// strict mode is off
Object.prototype.func = function() { return this; } // do nothing with the object
"use strict";
console.log( (4).func() ); // Number {[[PrimitiveValue]]: 4}; object
这种差异的根源是什么?进行此转换的原因是什么?
在严格模式的各种状态下,这种简单的动作怎么会如此不同?
解决方法:
在这个特定的例子中,任何不是对象,函数或数组的东西都是原始的. (函数和数组从技术上讲是对象.)原始值的问题是您无法使用方法.因此,您无法执行“ hello world” .toUpperCase()之类的操作.一般来说,程序员喜欢拥有与所使用的对象的类型有关的方法,而不是例如大量的全局可用函数(如parseInt).
因此,JavaScript具有String,Number和其他对象,这些对象具有toUpperCase,toLowerCase和toString之类的方法.当我们在字符串或数字上调用这些方法之一时,JavaScript会包装相应的对象,然后调用该方法并返回原始结果.这一切都是在后台进行的,我们通常不必担心.
除非它不起作用(如您的示例).在早期版本的JavaScript中犯了一些错误,但是由于向后兼容,我们无法真正更改这些内容.如果我在1995年建立了一个使用JavaScript的网站,然后在1997年更改了规则,我的网站就会突然崩溃.
也就是说,许多错误都有合理的解决方案,如果我们可以选择其他一些安全措施,那就太好了.较旧的浏览器会看到孤独的字符串“ use strict”,而忽略它.较新的浏览器将看到此内容并选择一组新的规则,概述为here.
内容总结
以上是互联网集市为您收集整理的Javascript-为什么严格模式会使如此简单的动作如此不同?全部内容,希望文章能够帮你解决Javascript-为什么严格模式会使如此简单的动作如此不同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。