返回顶部
首页 > 资讯 > 前端开发 > JavaScript >原生JS中应该禁止出现的写法
  • 632
分享到

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

2024-04-02 19:04:59 632人浏览 薄情痞子
摘要

目录块级函数直接修改对象的 prototype 原型withcalleecallereval块级函数 严格模式下,在 es6 之前应禁止使用。ES6 开始可以使用,函数的作用域为声明

块级函数

严格模式下,在 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中应该禁止的写法的资料请关注编程网其它相关文章!

--结束END--

本文标题: 原生JS中应该禁止出现的写法

本文链接: https://lsjlt.com/news/125131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 原生JS中应该禁止出现的写法
    目录块级函数直接修改对象的 prototype 原型withcalleecallereval块级函数 严格模式下,在 ES6 之前应禁止使用。ES6 开始可以使用,函数的作用域为声明...
    99+
    2024-04-02
  • 7个你应该知道的JS原生错误类型
    目录概述1. RangeError2. ReferenceError3. SyntaxError4. TypeError5. URIError6. EvalError7. Inter...
    99+
    2024-04-02
  • css实现禁止换行并超出隐藏的方法
    小编给大家分享一下css实现禁止换行并超出隐藏的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!css实现禁止换行并超出隐藏的方法:首先创建一个HTML示例文件...
    99+
    2023-06-14
  • JS原生实现轮播图的几种方法
    轮播图 主要思想就是: 在大的容器里,装着一个很长的表,表是容器宽度的整数倍。 然后通过更改列表样式里的left属性来实现左右滑动。 本文旨在控制滑动五张图片,但在html中使用了七...
    99+
    2024-04-02
  • mysql中出现大量sleep进程的原因及应该如何解决
    下面一起来了解下mysql中出现大量sleep进程的原因及应该如何解决,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql中出现大量sleep进程的原因及应该如何解决这篇短内容是你想要的。可能的原因...
    99+
    2024-04-02
  • Android应用中扫描二维码时出现用户禁止权限报错如何解决
    这期内容当中小编将会给大家带来有关Android应用中扫描二维码时出现用户禁止权限报错如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android扫描二维码时出现用户禁止权限报错问题解决办法当我用...
    99+
    2023-05-31
    android roi
  • 利用原生JS实现懒加载lazyLoad的三种方法总结
    目录前言Method 1: 高度对比 Method 2: 使用getBoundingClientRect() 的API Method 3: 采用最新的 IntersectionObs...
    99+
    2024-04-02
  • 网站出现负面信息后应该采取的解决办法
    本篇文章给大家分享的是有关网站出现负面信息后应该采取的解决办法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。不管是什么东西,每个人对他的看法不一样,评价也就不一样。再好的东西也...
    99+
    2023-06-12
  • vue.js中怎么使用原生js实现移动端的轮播图
    这篇文章主要介绍“vue.js中怎么使用原生js实现移动端的轮播图”,在日常操作中,相信很多人在vue.js中怎么使用原生js实现移动端的轮播图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue.js中怎么...
    99+
    2023-06-30
  • vue中使用js-xlsx导出excel的实现方法
    目录安装第一种第二种第三种安装 npm install --save xlsx file-saver 在组件里面引入 import FileSaver from 'file-save...
    99+
    2024-04-02
  • asp.net使用原生控件实现自定义列导出功能的方法
    目录自定义列实现尝试一尝试二总结自定义列实现 最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的...
    99+
    2024-04-02
  • WIN XP出现“延缓写入失败”错误的原因和解决办法
     问:电脑用的是双硬盘,最近系统任务栏弹出一个错误提示信息,提示延缓写入失败,然后在我的电脑中,D盘和G盘消失了。重启后,所有分区都可见,但对D盘或G盘中的数据进行操作时,系统就会假死、蓝屏重启。请问这是为什么...
    99+
    2023-05-25
    原因 解决办法 WIN XP
  • Win7系统IE9浏览器出现报错停止工作的原因及解决方法
    Win7系统IE9浏览器报错停止工作的原因可能有以下几个方面:1. 插件冲突:某些插件可能与IE9不兼容,导致浏览器崩溃。2. 病毒...
    99+
    2023-08-30
    win7
  • JS中call、apply和bind函数手写实现demo的方法是什么
    本篇内容介绍了“JS中call、apply和bind函数手写实现demo的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JavaS...
    99+
    2023-07-05
  • chatgpt赋能python:Python中出现NaN的原因及解决方法
    Python中出现NaN的原因及解决方法 在Python编程中,我们经常会遇到NaN这个问题。NaN代表“Not a Number”,通常表示数值无法计算或不是数字。 1. NaN出现的原因 NaN通...
    99+
    2023-09-07
    python chatgpt 开发语言 计算机
  • 分析phpexcel中出现乱码的原因和解决方法
    随着PHP语言在开发中的广泛应用,越来越多的开发者遇到过phpexcel输出乱码的情况。面对这种问题,大家不要慌张,本文将向大家介绍phpexcel中出现乱码的原因和解决方法。一、乱码产生的原因编码问题phpexcel文件的编码设置与本地环...
    99+
    2023-05-14
  • 如何使用JS编写一个函数返回数组中重复出现过的元素
    这篇文章主要介绍了如何使用JS编写一个函数返回数组中重复出现过的元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:var ...
    99+
    2024-04-02
  • PHP开发出现中文乱码的原因及解决方法
    本篇内容主要讲解“PHP开发出现中文乱码的原因及解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP开发出现中文乱码的原因及解决方法”吧!一.首先是PHP网页的编码php文件本身的编码与...
    99+
    2023-06-17
  • 如何使用PHP编写出高效的索引算法并实现快速响应?
    PHP是一种广泛使用的编程语言,它可以用于开发各种类型的应用程序,包括网站、移动应用程序和桌面应用程序等。在这篇文章中,我们将深入探讨如何使用PHP编写高效的索引算法,并实现快速响应。 为什么需要索引算法? 在编写PHP应用程序时,我们通常...
    99+
    2023-07-01
    编程算法 响应 索引
  • PHP出现中文乱码的原因及解决方法是什么
    本篇内容主要讲解“PHP出现中文乱码的原因及解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP出现中文乱码的原因及解决方法是什么”吧!PHP出现中文乱码的原因字符集编码不一致常常...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作