毕尔巴鄂对阵皇家社会:两支近邻球队将于西甲联赛 “巴斯克德比”中为捍卫荣耀而战贝壳第三季度营收226亿元 经调净利润17.8 亿元 同比下降17.46%AI营销,让科技巨头尝到了大模型商业化的甜头安恒信息范渊在乌镇峰会谈AI:以工具视之、以工具用之、以工具治理之诺基亚与微软再合作,为 Azure 数据中心供货延长五年天岳先进发布业界首款 300mm(12 英寸)N 型碳化硅衬底三星介绍内部安全团队 Project Infinity 攻防演练项目,高效修复 Galaxy 手机平板漏洞上海市将推进低空飞行服务管理能力建设,2027 年底前累计划设相应航线不少于 400 条岁末,海尔给您备好一套“小红花”为什么说Q10K Pro是今年最值得入手的电视?看完这几点就明白了!“小墨方·大不凡”!Brother“小墨方”系列彩喷一体机全新上市黄仁勋:AI智能需求强劲,“物理定律”限制英伟达芯片增长诺基亚与微软再合作,为Azure数据中心供货延长五年国家数据局:到2029年基本建成国家数据基础设施主体结构中国已发展成为全球最大的互联网市场,拥有全球最多的网民和移动互联网用户中国铁塔:计划按照10:1的比例合股美国FCC正式划定5.9GHz频段用于C-V2X技术在AI领域奋起直追!苹果要对Siri大革新 2026年正式发布日本机构公布量子专利榜单:本源量子、国盾量子位居全球第1中国联通:拟向华为、中兴展开5G网络设备竞争性谈判采购
  • 首页 > 数据存储频道 > 数据库频道 > 编程开发

    开发者最常犯的8个JavaScript错误

    2022年12月14日 10:37:38   来源:51CTO

      译者 | 布加迪

      说到编写JavaScript,有几个错误是开发人员常犯的。本文介绍几个最常见的JavaScript错误以及如何避免它们。

      1、误用this关键字

      开发人员在使用JavaScript时最常犯的错误之一是误用this关键字。this关键字引用当前代码执行的环境对象。这个对象可以是全局对象、DOM元素或任何其他对象。在大多数情况下,this关键字引用当前代码执的环境对象。

      然而,在一些情况下this关键字可能被误用。一个常见的错误是在嵌套函数中使用this关键字。在这里,this关键字将引用全局对象,而不是代码执行的环境对象。

      为了避免这个错误,确保仅在引用当前代码执行的环境对象时才使用this关键字。

      2、不使用严格模式

      开发人员常犯的另一个错误是不使用严格模式。严格模式是一种选择加入受限制的JavaScript变体的方法。在严格模式下,不允许某种语法,某些行为被更改。

      比如说,在严格模式下,不能使用未声明的变量。

      严格模式在默认情况下未启用,所以您必须选择启用它。为此,您可以在JavaScript文件的顶部添加以下代码行:

      "use strict";

      添加这行代码后,您告诉JavaScript引擎为后面的代码启用严格模式。

      3、在全局作用域中声明变量

      严格模式的主要用途之一是防止在全局作用域中声明变量。在JavaScript中,全局作用域是默认作用域。这意味着在函数外部声明的任何变量都自动被添加到全局作用域。

      这可能导致问题,因为很容易无意中覆盖全局作用域中的现有变量。比如说,如果您声明一个与现有全局变量同名的变量,将覆盖现有变量。

      为了避免这种情况,确保总是在函数内部声明变量。这将确保它们不被添加到全局作用域。

      4、使用==而不是===

      在JavaScript中,有两种方法来检查两个值是否相等:==和===。==操作符检查值是否相等,而===操作符检查值和类型是否相等。

      大多数情况下,您希望使用===操作符,因为它更严格。然而,在一些情况下==可能很有用。比如说,如果您在比较两个可能不同类型的值,==就很有帮助,因为它会在比较之前将值转换成相同的类型。

      5、记绑定this

      在使用JavaScript的面向对象特性时,您常常需要在方法内部引用当前对象。为此,应使用this关键字。

      然而,this的值可以根据调用方法的方式进行改变。比如说,如果您在一个对象上调用一个方法,this将引用该对象。但如果您使用另一个对象调用相同的方法,this将转而引用该对象。

      这可能是个问题,因为很难跟踪this引用什么。为了避免这种情况,确保将this的值绑定到当前对象。可以通过使用bind方法来实现:

      复制

      var obj = {

      foo: function() {

      console.log(this);

      }

      };

      var bar = obj.foo.bind(obj);

      bar(); // prints the obj object

      在上述代码中,我们用foo方法创建了一个对象。然后,我们创建一个名为bar的新变量,并将其设置为在foo上调用bind的结果。这将foo中的this的值设置为obj对象。当我们调用bar时,它将obj打印输出到控制台。

      6、修改字符串而不是创建新的字符串

      在JavaScript中,字符串是不可变的。这意味着一旦创建了字符串,就不能更改它。

      然而,有几个方法可以用来修改字符串。比如说,replace方法可用于将字符串的一部分替换成另一个字符串。

      复制

      var str = "Hello world!";

      str.replace(" world", " JavaScript"); // returns "Hello JavaScript!"

      replace方法实际上并不修改原始字符串,只是返回经过修改的新字符串。记住这一点很重要,因为当您打算创建新字符串时,很容易无意中修改字符串。

      为了避免这种错误,确保在修改现有字符串时创建了新字符串。可以使用slice方法来做到这一点:

      复制

      var str = "Hello world!";

      var newStr = str.slice(0, 5) + " JavaScript!"; // returns "Hello JavaScript!"

      在上述代码中,我们使用slice方法来创建新字符串,其中含有原始字符串的前五个字符。然后我们将其与字符串“JavaScript!”连接起来,这创建了一个新字符串,我们可以将其赋予给newStr变量。

      7、导致内存泄漏

      内存泄漏是用JavaScript编程时可能发生的问题。当您坚持引用不再需要的对象时,就会出现这种情况。

      比如说,以下列代码为例:

      复制

      var arr = [1, 2, 3, 4, 5];

      var foo = function() {

      arr.push(6);

      };

      setInterval(foo, 1000);

      在上述代码中,我们创建了一个数组和一个往数组添加新元素的函数。然后,我们设置一个计时器,每秒钟调用一次函数。

      这段代码将导致内存泄漏,因为arr数组永远不会被垃圾回收。这是由于foo函数引用arr数组,foo函数每秒钟都被调用一次。

      为了避免这个错误,确保删除对不再需要的对象的引用。在上述例子中,我们可以使用clearInterval方法来做到这一点:

      复制

      var arr = [1, 2, 3, 4, 5];

      var foo = function() {

      arr.push(6);

      };

      var interval = setInterval(foo, 1000);

      clearInterval(interval);

      在上述代码中,我们将setInterval的返回值存储在一个变量中。这个返回值是对已创建的间隔时间的引用。然后可以使用clearInterval方法来清除间隔时间,并删除对arr数组的引用。

      8、不使用IIFE

      IIFE(立即调用的函数表达式)是一个立即执行的函数。IIFE通常在JavaScript中用于创建本地作用域。

      比如,以下列代码为例:

      复制

      var foo = "foo";

      (function() {

      var foo = "bar";

      })();

      console.log(foo); // prints "foo"

      在上述代码中,我们有一个名为foo的全局变量,其值为“foo”。然后我们创建一个具有同名的局部变量的IIFE。这个局部变量只能在IIFE内部访问。

      当我们将foo的值记录到控制台时,它会输出“foo”。这是由于IIFE创建了一个与全局作用域不同的新作用域。

      为了避免这个错误,确保在想要创建新作用域时使用IIFE。

      文章内容仅供阅读,不构成投资建议,请谨慎对待。投资者据此操作,风险自担。

    即时

    新闻

    明火炊具市场:三季度健康属性贯穿全类目

    奥维云网(AVC)推总数据显示,2024年1-9月明火炊具线上零售额94.2亿元,同比增加3.1%,其中抖音渠道表现优异,同比有14%的涨幅,传统电商略有下滑,同比降低2.3%。

    企业IT

    重庆创新公积金应用,“区块链+政务服务”显成效

    “以前都要去窗口办,一套流程下来都要半个月了,现在方便多了!”打开“重庆公积金”微信小程序,按照提示流程提交相关材料,仅几秒钟,重庆市民曾某的账户就打进了21600元。

    3C消费

    华硕ProArt创艺27 Pro PA279CRV显示器,高能实力,创

    华硕ProArt创艺27 Pro PA279CRV显示器,凭借其优秀的性能配置和精准的色彩呈现能力,为您的创作工作带来实质性的帮助,双十一期间低至2799元,性价比很高,简直是创作者们的首选。

    研究

    中国信通院罗松:深度解读《工业互联网标识解析体系

    9月14日,2024全球工业互联网大会——工业互联网标识解析专题论坛在沈阳成功举办。