原生JS编写时哪些写法要避免?
Admin 2021-11-09 群英技术资讯 950 次浏览
原生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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Typescript中extends关键字的基本使用 目录 前言 基本使用 泛型约束 条件类型与高阶类型 在高级类型中的应用 参考文献 总结 前言 extends关键字在TS编程中出现的频率挺高的,而且不同场景下代表的含义不一样,特此总结一下
如果我们一个网页的内容,那么就需要做分页功能,因此这篇文章就给大家分享用JavaScript怎样实现简易的分页的功能,实现效果及代码如下,对大家了解分页功能的实现有一定的帮助,接下来我们就一起来了解看看吧。
Node如何实现数据传输加密解密?下面本篇文章给大家介绍一下Node.js实现前后端数据传输加密解密的方法,希望对大家有所帮助!
这篇文章给大家分享的是jQuery如何实现图片隐藏和显示的一个示例,文中示例是实现一张图片慢慢消失隐藏后,显示另一种图片的效果,那么具体怎样实现呢?文中的示例介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
这篇文章主要介绍了template标签用法(含vue中的用法总结),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008