原生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 相关文章推荐
javascript 静态对象和构造函数的使用和公私问题
Mar 02 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
Sep 12 Javascript
iScroll中事件点击触发两次解决方案
Mar 11 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
使用DeviceOne实现微信小程序功能
Dec 29 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
js中事件对象和事件委托的介绍
Jan 21 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
Feb 28 Javascript
详解vue中移动端自适应方案
May 05 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
详解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/04/08 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
IE和Firefox下javascript的兼容写法小结
2008/12/10 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
2016/07/06 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
python3 反射的四种基本方法解析
2019/08/26 Python
python实现控制台输出彩色字体
2020/04/05 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
Pytest测试框架基本使用方法详解
2020/11/25 Python
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
市场专员岗位职责
2014/02/14 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
餐厅筹备计划书
2014/04/25 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
大学迎新标语
2014/06/26 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
总经理司机岗位职责
2015/04/10 职场文书
恰同学少年观后感
2015/06/08 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python