原生JS编写时哪些写法要避免?
Admin 2021-11-09 群英技术资讯 508 次浏览
原生JS编写时哪些写法要避免?我们知道原生JS编写是有规范和要求的,而且有良好的代码编写习惯也是很重要的,对此本文就给大家来介绍一下原生JS中应该禁止出现的几种写法,感兴趣的朋友可以了解看看。
严格模式下,在 ES6 之前应禁止使用。ES6 开始可以使用,函数的作用域为声明该函数的块内部。非严格模式下应禁止使用。
if(true) { function test() { //块级函数 console.log(1); } } test();
浏览器对原型进行了优化,在调用实例之前,会为对象的方法提前规划内存位置。所以不可以直接修改 prototype 原型。以下两种方法都应禁止使用
使用 Object.setPrototypeOf 修改原型
function a(){} a.prototype = { a_prop: "a val" }; function b(){} var proto = { b_prop: "b val" }; Object.setPrototypeOf( proto, a.prototype ); b.prototype = proto; var test = new b; console.log(test.a_prop); // a val console.log(test.b_prop); // b val
直接修改对象的 __proto__ 属性
function a(){} a.prototype = { a_prop: "a val" }; function b(){} var proto = { b_prop: "b val", __proto__: a.prototype //直接修改 b 对象的 __prototype__ 属性 }; b.prototype = proto; var test = new b; console.log(test.a_prop); // a val console.log(test.b_prop); // b val
with 的用法:
var a = { p1: 1, p2: 2 } with (a) { p1 = 3; } console.log(a.p1);
应该禁止使用 with,例如:
function a(arg1, arg2) { with (arg2){ console.log(arg1); // 无法确定是要输出第一个参数还是要输出 arg2 的 arg1 属性 } } var arg2 = {arg1:1} a("arg1", arg2)
arguments.callee 表示当前正在执行的函数:
function a(arg1) { if (arg1 > 1) { return arg1 * arguments.callee(arg1 - 1); } else { return 1; } } console.log(a(3)); // 6
当一个函数必须调用自身的时候, 应禁止使用arguments.callee(),直接通过函数名字调用该函数。
function a(arg1) { if (arg1 > 1) { return arg1 * a(arg1 - 1); // 直接通过函数名称调用 } else { return 1; } } console.log(a(3)); // 6
caller 表示函数的调用者,应禁止使用,该特性不是标准的。
function a() { console.log(a.caller); // function b() { a(); } } function b() { a(); } b();
eval() 可以把传入的字符串参数当成JavaScript代码执行。
eval("var a = 1, b = 2; console.log(a+b)"); // 3
禁止使用 eval。eval 比一般JavaScript执行要慢,因为浏览器对 javascript 进行了优化。eval 方法也不安全,因为它使用与调用者相同的权限执行代码,而且 eval() 被调用时,它的作用域也会暴露。应该用 Function 代替:
var a = new Function("a", "b", "console.log(a+b)") a(1,2); // 3
关于原生JS编写要避免的几种写法就介绍到这,上述几种写法大家一定要注意了。最后,想要了解更多原生JS禁止出现的写法,大家可以关注其它的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
现在很多网站都会做弹窗,但是我们知道频繁的弹窗和关闭不了的弹窗都是不利于用户体验的。为了提高用户的弹窗体验,我们能够使用vue实现点击空白区域来关闭弹窗。那么这要如何实现呢?下面给大家分享两个方法。
今天我们来了解一下vuex,下文会给大家分享vuex中四大对象state、mutations、getters、actions以及他们的用法,对新手学习和理解vuex对象有一定的帮助,感兴趣的朋友就继续往下看吧。
这篇文章主要给大家分享怎样使用JS怎样实现数据监听的方法,下文实现步骤和讲解有一定的借鉴价值,感兴趣的朋友可以参考一下,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧。
这篇文章主要为大家详细介绍了vue大屏展示适配,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要介绍命令模式的内容,JavaScript设计模式有很多种类型,命令模式是JavaScript设计模式中行为型的一种设计模式,下面有详细的介绍和实例,对新手学习和理解JavaScript设计模式有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008