最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生JS中應(yīng)該禁止出現(xiàn)的寫法

 更新時(shí)間:2021年05月04日 11:46:15   作者:淺笑·  
這篇文章主要介紹了原生JS中應(yīng)該禁止出現(xiàn)的寫法,以提高代碼效率和安全性,對(duì)效率和安全感興趣的同學(xué),可以參考下

塊級(jí)函數(shù)

嚴(yán)格模式下,在 ES6 之前應(yīng)禁止使用。ES6 開始可以使用,函數(shù)的作用域?yàn)槁暶髟摵瘮?shù)的塊內(nèi)部。非嚴(yán)格模式下應(yīng)禁止使用。

if(true) {
    function test() { //塊級(jí)函數(shù)
        console.log(1);
    }
}
test();

直接修改對(duì)象的 prototype 原型

瀏覽器對(duì)原型進(jìn)行了優(yōu)化,在調(diào)用實(shí)例之前,會(huì)為對(duì)象的方法提前規(guī)劃內(nèi)存位置。所以不可以直接修改 prototype 原型。以下兩種方法都應(yīng)禁止使用

使用 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

直接修改對(duì)象的 __proto__ 屬性

function a(){}
a.prototype = {
  a_prop: "a val"
};
function b(){}
var proto = {
  b_prop: "b val",
  __proto__: a.prototype //直接修改 b 對(duì)象的 __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);

應(yīng)該禁止使用 with,例如:

function a(arg1, arg2) {
  with (arg2){
    console.log(arg1); // 無(wú)法確定是要輸出第一個(gè)參數(shù)還是要輸出 arg2 的 arg1 屬性
  }
}
var arg2 = {arg1:1}
a("arg1", arg2)

callee

arguments.callee 表示當(dāng)前正在執(zhí)行的函數(shù):

function a(arg1) {
    if (arg1 > 1) {
        return arg1 * arguments.callee(arg1 - 1);
    }
    else {
        return 1;
    }
}
console.log(a(3)); // 6

當(dāng)一個(gè)函數(shù)必須調(diào)用自身的時(shí)候, 應(yīng)禁止使用arguments.callee(),直接通過(guò)函數(shù)名字調(diào)用該函數(shù)。

function a(arg1) {
    if (arg1 > 1) {
        return arg1 * a(arg1 - 1); // 直接通過(guò)函數(shù)名稱調(diào)用
    }
    else {
        return 1;
    }
}
console.log(a(3)); // 6

caller

caller 表示函數(shù)的調(diào)用者,應(yīng)禁止使用,該特性不是標(biāo)準(zhǔn)的。

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

eval

eval() 可以把傳入的字符串參數(shù)當(dāng)成JavaScript代碼執(zhí)行。

eval("var a = 1, b = 2; console.log(a+b)"); // 3

禁止使用 eval。eval 比一般JavaScript執(zhí)行要慢,因?yàn)闉g覽器對(duì) javascript 進(jìn)行了優(yōu)化。eval 方法也不安全,因?yàn)樗褂门c調(diào)用者相同的權(quán)限執(zhí)行代碼,而且 eval() 被調(diào)用時(shí),它的作用域也會(huì)暴露。應(yīng)該用 Function 代替:

var a = new Function("a", "b", "console.log(a+b)")
a(1,2); // 3

以上就是原生JS中應(yīng)該禁止出現(xiàn)的寫法的詳細(xì)內(nèi)容,更多關(guān)于原生JS中應(yīng)該禁止的寫法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 簡(jiǎn)單實(shí)現(xiàn)JavaScript圖片切換效果

    簡(jiǎn)單實(shí)現(xiàn)JavaScript圖片切換效果

    這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)JavaScript圖片切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • json數(shù)據(jù)處理技巧(字段帶空格、增加字段、排序等等)

    json數(shù)據(jù)處理技巧(字段帶空格、增加字段、排序等等)

    json數(shù)據(jù)處理技巧例如:正常取值、字段帶空格、賦值、增加字段、排序、拷貝、數(shù)組添加和刪除等,詳細(xì)請(qǐng)參考本文或許對(duì)你有所幫助
    2013-06-06
  • 輸入npm?run?xxx后執(zhí)行原理深入解析

    輸入npm?run?xxx后執(zhí)行原理深入解析

    這篇文章主要為大家介紹了輸入npm?run?xxx后執(zhí)行原理深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JavaScript 函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef) 分享

    JavaScript 函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef) 分享

    這篇文章主要介紹了在JS中函數(shù)參數(shù)是傳值(byVal)還是傳址(byRef)的誤區(qū)我們通過(guò)實(shí)例說(shuō)明一下,有需要的朋友可以參考
    2013-07-07
  • Object.keys方法實(shí)例詳解

    Object.keys方法實(shí)例詳解

    這篇文章主要介紹了Object.keys方法實(shí)例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 微信小程序開發(fā)常用功能匯總

    微信小程序開發(fā)常用功能匯總

    這篇文章主要介紹了微信小程序開發(fā)常用功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 全面理解JavaScript中的繼承(必看)

    全面理解JavaScript中的繼承(必看)

    下面小編就為大家?guī)?lái)一篇全面理解JavaScript中的繼承(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • 前端解決跨域問(wèn)題nmp安裝http-server的問(wèn)題

    前端解決跨域問(wèn)題nmp安裝http-server的問(wèn)題

    這篇文章主要介紹了前端解決跨域問(wèn)題-nmp安裝http-server的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 你可能不知道的前端算法之文字避讓(inMap)

    你可能不知道的前端算法之文字避讓(inMap)

    這篇文章主要給大家介紹了關(guān)于前端算法之文字避讓的相關(guān)資料,對(duì)于這個(gè)知識(shí)相信很多的朋友都不知道,但看到效果會(huì)驚嘆不已,實(shí)現(xiàn)這一個(gè)效果主要利用的是inMap文字避讓功能,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • JavaScript實(shí)現(xiàn)鼠標(biāo)移入隨機(jī)變換顏色

    JavaScript實(shí)現(xiàn)鼠標(biāo)移入隨機(jī)變換顏色

    這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)鼠標(biāo)移入隨機(jī)變換顏色的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

鹿泉市| 芷江| 景宁| 武夷山市| 安顺市| 美姑县| 蒙阴县| 明星| 岐山县| 大丰市| 武鸣县| 海宁市| 临桂县| 申扎县| 双柏县| 建水县| 巴马| 瓦房店市| 越西县| 汶上县| 灵川县| 全椒县| 长丰县| 滨海县| 庄河市| 福海县| 获嘉县| 景谷| 游戏| 柳江县| 新昌县| 宜州市| 金寨县| 甘谷县| 龙山县| 凤山市| 临海市| 拉萨市| 奎屯市| 张家港市| 封丘县|