原生JS中应该禁止出现的写法


Posted in Javascript onMay 05, 2021

块级函数

严格模式下,在 ES6 之前应禁止使用。ES6 开始可以使用,函数的作用域为声明该函数的块内部。非严格模式下应禁止使用。

if(true) {
    function test() { //块级函数
        console.log(1);
    }
}
test();

直接修改对象的 prototype 原型

浏览器对原型进行了优化,在调用实例之前,会为对象的方法提前规划内存位置。所以不可以直接修改 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

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)

callee

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

caller 表示函数的调用者,应禁止使用,该特性不是标准的。

function a() {
    console.log(a.caller); // function b() { a(); }
}
function b() {
    a();
}
b();

eval

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中应该禁止的写法的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JScript中的undefined和"undefined"的区别
Mar 08 Javascript
javascript+css 网页每次加载不同样式的实现方法
Dec 27 Javascript
js 自定义个性下拉选择框示例
Aug 20 Javascript
js向上无缝滚动,网站公告效果 具体代码
Nov 18 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
同步文本框内容JS代码实现
Aug 04 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
JS异步执行结果获取的3种解决方式
Feb 19 Javascript
富文本编辑器vue2-editor实现全屏功能
May 26 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 Javascript
详解Javascript实践中的命令模式
如何制作自己的原生JavaScript路由
May 05 #Javascript
Vue项目中如何封装axios(统一管理http请求)
May 02 #Vue.js
如何用JavaScript学习算法复杂度
JS不要再到处使用绝对等于运算符了
Apr 30 #Javascript
如何用Node.js编写内存效率高的应用程序
用几道面试题来看JavaScript执行机制
Apr 30 #Javascript
You might like
PHP错误和异长常处理总结
2014/03/06 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php实现微信支付之现金红包
2018/05/30 PHP
PHP echo()函数讲解
2019/02/15 PHP
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
详解React+Koa实现服务端渲染(SSR)
2018/05/23 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
python列表的增删改查实例代码
2018/01/30 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python中单下划线_的常见用法总结
2018/07/10 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python区分不同数据类型的方法
2019/10/14 Python
python的pip有什么用
2020/06/17 Python
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
应届护士推荐信
2013/11/16 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
促销活动总结范文
2014/04/30 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
道德模范事迹材料
2014/12/20 职场文书
2015年质检工作总结
2015/05/04 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书