久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:151日期:2024-03-28 18:12:51
塊級(jí)函數(shù)

嚴(yán)格模式下,在 ES6 之前應(yīng)禁止使用。ES6 開(kāi)始可以使用,函數(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 valconsole.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 valconsole.log(test.b_prop); // b valwith

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ù)名稱(chēng)調(diào)用 } else {return 1; }}console.log(a(3)); // 6caller

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)的寫(xiě)法的詳細(xì)內(nèi)容,更多關(guān)于原生JS中應(yīng)該禁止的寫(xiě)法的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 泸西县| 通榆县| 酒泉市| 宜阳县| 嘉禾县| 乌拉特后旗| 武平县| 拉孜县| 靖州| 彭水| 绿春县| 丰都县| 应城市| 广饶县| 齐齐哈尔市| 九江县| 东乌珠穆沁旗| 平遥县| 邮箱| 台北县| 双江| 新昌县| 白河县| 宜春市| 宜宾县| 大同市| 浦城县| 剑阁县| 托里县| 卓资县| 郎溪县| 灵川县| 石河子市| 屏边| 门源| 百色市| 那坡县| 东阳市| 昌吉市| 商洛市| 永丰县|