国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

前端知識(shí)集錦2

Elle / 1408人閱讀

摘要:函數(shù)內(nèi)部重新聲明了一個(gè),值為,這兩個(gè)是不一樣的,互相不產(chǎn)生影響,因此最后輸出。方法實(shí)現(xiàn)繼承相同的簡(jiǎn)單使用用對(duì)象替換當(dāng)前對(duì)象,如果為空,則為全局對(duì)象。

前端學(xué)習(xí)的摘錄,持續(xù)更新中...
1. 數(shù)組去重3種方案

使用set去重:set是ES6中提供的數(shù)據(jù)結(jié)構(gòu),不同于數(shù)組,所有的值都是不重復(fù)的,Set內(nèi)部使用===來(lái)判斷是否相等,類(lèi)似"1"和1會(huì)兩個(gè)都保存,NaN和NaN只會(huì)保存一個(gè)

let unique= [...new Set([1,"1",1,NaN,NaN,undefined,undefined,null,null])];
//[1, "1", NaN, undefined, null]

遍歷,將值添加到新數(shù)組,用indexOf()判斷值是否存在,已存在就不添加,達(dá)到去重效果。(對(duì)NaN去重失敗)

 let a = [1,"1",1,NaN,NaN,undefined,undefined,null,null];
 let unique = arr =>{
     let newA = [];
     arr.forEach(key => {
         if(newA.indexOf(key)<0){ //遍歷newA是否存在key,如果存在key會(huì)大于0就跳過(guò)push的那一步
            newA.push(key);
         }
     });
     return newA;
 }
 unique(a); // ["1", 1, NaN, NaN, undefined, null]

遍歷,將數(shù)組的值添加到一個(gè)對(duì)象的屬性名里,并給屬性賦值。對(duì)象不能添加相同屬性名,以這個(gè)為依據(jù)可以實(shí)現(xiàn)數(shù)組去重,然后用Object.keys(對(duì)象)返回這個(gè)對(duì)象可枚舉屬性組成的數(shù)組,這個(gè)數(shù)組就是去重后的數(shù)組。(返回的都是字符串,對(duì)于1和"1"都當(dāng)成"1")

let a = [1,"1",1,NaN,NaN,undefined,undefined,null,null];
let unique = arr => {
    var obj = {};
    arr.forEach(value => {
        obj[value] = 0; // 隨便賦值,為了將屬性添加進(jìn)obj對(duì)象
    });
    return Object.keys(obj);
}
unique(a); // ["1", "NaN", "undefined", "null"]
2. 深拷貝

深度遍歷屬性值拷貝

function deepcopy(obj) {
    var copyObj = Object.create(Object.getPrototypeOf(obj));
    Object.getOwnPropertyNames(obj).forEach((keyName) => {
        if ( typeof obj[keyName] == "object") {
            copyObj[keyName] = deepcopy(obj[keyName])
        } else {
            copyObj[keyName] = obj[keyName]
        } 
    });
    return copyObj;
}

采用JSON.parse(JSON.stringify(obj)),有局限性

function deepcopy(obj){
    return JSON.parse(JSON.stringify(obj));
}
3. 函數(shù)length屬性

函數(shù)length屬性的含義: 該函數(shù)預(yù)期傳入的參數(shù)個(gè)數(shù)。指定了默認(rèn)值以后,length將返回沒(méi)有指定默認(rèn)值的參數(shù)個(gè)數(shù);指定了默認(rèn)值后,length屬性將失真。

(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

如果設(shè)置了默認(rèn)值的參數(shù)不是尾參數(shù),那么length屬性也不再計(jì)入后面的參數(shù)了。

(function (a = 0, b, c) {}).length // 0
(function (a, b = 1, c) {}).length // 1
4.參數(shù)作用域

如果參數(shù)默認(rèn)值是一個(gè)變量,則該變量所處的作用域,與其他變量的作用域規(guī)則是樣,即先是當(dāng)前函數(shù)的作用域,然后才是全局作用域。

var x = 1;

function f(x, y = x) {
  console.log(y);
}

f(2) // 2

上面代碼中,參數(shù)y的默認(rèn)值等于x。調(diào)用時(shí),由于函數(shù)作用域內(nèi)部的變量x已經(jīng)生成,所以y等于參數(shù)x,而不是全局變量x;如果調(diào)用時(shí),函數(shù)作用域內(nèi)部的變量x沒(méi)有生成,結(jié)果則不同。

let x = 1;

function f(y = x) {
  let x = 2;
  console.log(y);
}

f() // 1

上面代碼中,函數(shù)調(diào)用時(shí),y的默認(rèn)值變量x尚未在函數(shù)內(nèi)部生成,所以x指向全局變量。如果此時(shí),全局變量x不存在,就會(huì)報(bào)錯(cuò):ReferenceError: x is not defined
一個(gè)復(fù)雜的例子:

var x = 1;

function foo(x, y = function() { x = 2; }) {
  var x = 3;
  y();
  console.log(x);
}

foo() // 3

上面代碼中,函數(shù)foo的參數(shù)y的默認(rèn)值是一個(gè)匿名函數(shù)。函數(shù)foo調(diào)用時(shí),它的參數(shù)x的值為undefined,所以y函數(shù)內(nèi)部的x一開(kāi)始是undefined,后來(lái)被重新賦值2。函數(shù)foo內(nèi)部重新聲明了一個(gè)x,值為3,這兩個(gè)x是不一樣的,互相不產(chǎn)生影響,因此最后輸出3。

如果將var x = 3的var去除,兩個(gè)x就是一樣的,最后輸出的就是2。

5. call方法實(shí)現(xiàn)繼承(apply相同)

call的簡(jiǎn)單使用:obj1.method.call(obj2,argument1,argument2,...), 用對(duì)象obj2替換當(dāng)前對(duì)象obj1,如果obj2為空,則為全局對(duì)象。簡(jiǎn)單使用:

function add(a, b) { return a+b; }

function sub(a, b) { return a-b; }

add.call(sub, 3, 1);  // 4

繼承:

function Parent() {
    this.showMsg = function(msg) {
        return msg;
    }
}

function Child() {
    Parent.call(this);    // this.super()意味
}

const chi = new Child();
chi.showMsg("hello world");   // "hello world"

多重繼承:

function Parent1() {
    this.add = function(a, b) {
        return a + b;
    }
}

function Parent2() {
    this.sub = function(a, b) {
        return a - b;
    }
}

function Child() {
    Parent1.call(this);
    Parent2.call(this);
}
6. Javascript 詞法作用域

JavaScript是詞法作用域不是動(dòng)態(tài)作用域,詞法作用域是寫(xiě)代碼或說(shuō)定義時(shí)確定的,動(dòng)態(tài)作用域是在運(yùn)行時(shí)確定的,詞法作用域關(guān)注函數(shù)在何處申明,動(dòng)態(tài)作用域關(guān)注在何處調(diào)用。但是,JS中的this關(guān)注的也是函數(shù)的調(diào)用。

function foo() {
    console.log(a);   // 2
}
function bar () {
    var a = 3;
    foo();
}
var a = 2;
bar()

如果按照動(dòng)態(tài)作用域理論運(yùn)行結(jié)果是:3

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97067.html

相關(guān)文章

  • 前端不為人知的一面——前端知識(shí)集錦

    摘要:不聲明第三個(gè)變量的值交換我們都知道交換兩個(gè)變量值的常規(guī)做法,那就是聲明一個(gè)中間變量來(lái)暫存。但鮮有人去挑戰(zhàn)不聲明中間變量的情況,下面的代碼給出了這種實(shí)現(xiàn)。 前端已經(jīng)被玩兒壞了!像console.log()可以向控制臺(tái)輸出圖片等炫酷的玩意已經(jīng)不是什么新聞了,像用||操作符給變量賦默認(rèn)值也是人盡皆知的舊聞了,今天看到Quora上一個(gè)帖子,瞬間又GET了好多前端技能,一些屬于技巧,一些則是聞所...

    habren 評(píng)論0 收藏0
  • 微信小程序知識(shí)總結(jié)及案例集錦

    摘要:對(duì)微信小程序進(jìn)行全局配置,決定頁(yè)面文件的路徑窗口表現(xiàn)設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間設(shè)置多等。 微信小程序知識(shí)總結(jié)及案例集錦 微信小程序的發(fā)展會(huì)和微信公眾號(hào)一樣,在某個(gè)時(shí)間點(diǎn)爆發(fā) 學(xué)習(xí)路徑 微信小程序最好的教程肯定是官方的文檔啦,點(diǎn)擊這里直達(dá) 微信官方文檔 認(rèn)真跟著文檔看一遍,相信有vue前端經(jīng)驗(yàn)的看下應(yīng)該就能上手了,然后安裝 微信小程序開(kāi)發(fā)者工具 新建一個(gè)quick start項(xiàng)目,了解代碼結(jié)構(gòu),...

    sean 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)# 前端基礎(chǔ)知識(shí)面試集錦1

    摘要:作用標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別聲明位于位于文檔中的第一行,處于標(biāo)簽之前。又稱(chēng)內(nèi)核及以上版本,等內(nèi)核及以上。存儲(chǔ)大小數(shù)據(jù)大小不能超過(guò)。可以防止惡意刷票論壇灌水有效防止對(duì)某一個(gè)特定注冊(cè)用戶(hù)用特定程序暴力方式進(jìn)行不斷的登陸嘗試。 HTMLDoctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?(1)、聲明位于位于HT...

    番茄西紅柿 評(píng)論0 收藏2637

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<