JavaScript部分基礎(chǔ)知識(shí)回顧(一)

js的數(shù)據(jù)類型

  • string number boolean undefined null object symbol
  • object中包含了function Array Date

js判斷類型方法

js中判斷類型主要有三種方式,分別為:typeof instanceof Object.prototype.toString.call()

// typeof
typeof "abc" === "string"  //true 
typeof [] === "array"      //false
typeof function () {} === "function"  //true
//typeof 的返回值有:string, number, boolean, undefined, function, object

//instanceof
[] instanceof Array  //true
"abc" instanceof String  //true

//Object.prototype.toString.call()
Object.prototype.toString.call("abc")  //[object String]

Get請(qǐng)求和Post請(qǐng)求的區(qū)別

Get請(qǐng)求:

  • 參數(shù)拼接在url上
  • 瀏覽器可以產(chǎn)生緩存
  • 瀏覽器對(duì)get請(qǐng)求的url長(zhǎng)度有限制
  • 一般用于獲取數(shù)據(jù)

Post請(qǐng)求:

  • 數(shù)據(jù)包裝在請(qǐng)求體中發(fā)送
  • 一般用于提交表單
  • 要比get安全性高些

閉包

  • 什么是閉包?
    閉包簡(jiǎn)單點(diǎn)說(shuō)靶擦,就是返回一個(gè)函數(shù)咆爽,而這個(gè)函數(shù)保存了父作用域蕴掏,此時(shí)父作用域不會(huì)被清除患朱,此時(shí)就形成了一個(gè)閉包揽惹。閉包的作用很多,比如某些時(shí)候需要緩存一個(gè)結(jié)果彩掐,實(shí)現(xiàn)一個(gè)私有變量等等。
  • 閉包實(shí)現(xiàn)的單例模式
const Sington = (function () {
  let instance = null;
  function F() {
    if (instance) return instance;
    instance = this;
  }
  F.getInstance = function () { 
    if (!instance) instance = this;
    return instance; 
  }
  return F;
})();

類的繼承

// 說(shuō)到繼承灰追,就需要一個(gè)基類
function Human(name, age) {
  this.name = name;
  this.age = age;
}
Human.prototype.say = function () {
  console.log(`I am ${this.name}, ${this.age} years old.`);
}
  • 原型鏈繼承
function Man() {
  this.gender = "man";
}
Man.prototype = new Human("a man", 30);
Man.prototype.constructor = Man;
new Man().say();  //I am a man, 30 years old.
new Man().gender;  //man
  • 構(gòu)造方法繼承
function Woman(name, age) {
  Human.call(this, name, age);
  this.gender = "woman";
}
new Woman("Tina", 26).say();  //此處報(bào)錯(cuò)堵幽,因?yàn)闃?gòu)造方法繼承,只是繼承了屬性弹澎,而沒(méi)有繼承原型上的方法
//所以需要定義say方法
Woman.prototype.say = function () {
  console.log(`I am ${this.name}, ${this.age} years old ${this.gender}.`);
}
new Woman("Tina", 26).say();  //I am Tina, 26 years old woman.
  • 原型鏈和構(gòu)造方法組合繼承
/** 1.原型鏈繼承
 * 弊:
 *    a.不方便傳遞構(gòu)造函數(shù)參數(shù)
 *    b.如果父類中含有引用類型的屬性朴下,則子類實(shí)例對(duì)其修改會(huì)對(duì)其他實(shí)例有影響
 *    c.子類的原型包含父類的一個(gè)實(shí)例,有點(diǎn)耗費(fèi)資源
 * 利:
 *    既能繼承屬性又能繼承原型
 *
 * 2.構(gòu)造函數(shù)繼承
 * 弊:
 *    a.只能繼承屬性苦蒿,不能繼承原型
 * 利:
 *    方便傳參殴胧;不存在引用修改影響問(wèn)題;不存在浪費(fèi)資源問(wèn)題
 */
// 組合繼承刽肠,結(jié)合兩者優(yōu)勢(shì)溃肪,當(dāng)然也會(huì)存在兩者缺陷
function People(name, age) {
  Human.call(this, name, age);
}
People.prototype = new Human();
People.prototype.constructor = People;
new People("Tom", 34).say();  //I am Tom, 34 years old.
  • 寄生繼承
function Personal(name, age) {
  Human.call(this, name, age);
}
(function () {
  function F() {}  //中間宿主
  F.prototype = Human.prototype;
  Personal.prototype = new F();
  Personal.prototype.constructor = Personal;
})();
new Personal("Jet", 99).say();  //I am Jet, 99 years old.

bind,apply音五,call

/** 三個(gè)方法都是改變當(dāng)前環(huán)境中的this指向
 *  call, apply 調(diào)用后立即執(zhí)行惫撰,但是參數(shù)不一樣,第一個(gè)參數(shù)都是指定的this躺涝,其后的參數(shù)都是需要傳遞的參數(shù)厨钻,call通過(guò)逗號(hào)分隔,而apply傳入數(shù)組
 *  bind 調(diào)用后返回一個(gè)一個(gè)待執(zhí)行的方法坚嗜,需要再次主動(dòng)調(diào)用夯膀。參數(shù)值傳遞只需要指定的那個(gè)this
 */
var vn = "window";
function F() {
  this.vn = "F";
}
var f = new F();
function say(name, ex) {
  console.log(name + " say: " + this.vn + " is current this, " + ex);
}
//直接調(diào)用
say("Tom", "hahaha");  //Tom say: window is current this, hahaha
// call, apply
say.call(f, "Tom", "hahaha");
say.apply(f, ["Tom", "hahaha"]);
// bind
var say2 = say.bind(f);
say2("Tom", "hahaha");

實(shí)現(xiàn)一個(gè)深度克隆

var t = {
  a: 1,
  b: [1,2],
  c: [{h: true, i: "abc"}],
  d: {
    x: 1,
    z: function () {}
  },
  e: [1, {a:1}]
}
function copyDeep(obj) {
  var result = obj instanceof Array ? [] : {};
  for (var o in obj) {
    if (obj[o] instanceof Array) {
        result[o] = copyDeep(obj[o]);
    } else if (o instanceof Object) {
        result[o] = copyDeep(obj[o]);
    } else {
        result[o] = obj[o];
    }
  }
  return result;
}

實(shí)現(xiàn)一個(gè)將原生的ajax封裝成promise

const PromiseAjax = function (url) {
  return new Promise((resolve, rejected) => {
    const httpRequest = new XMLHttpRequest();
    httpRequest.open("GET", url);
    httpRequest.send();
    httpRequest.onreadystatechange = text => {
      if (httpRequest.readyState === 4 && httpRequest.status === 200) {
          //處理成功
          resolve(text);
      }
      if (httpRequest.readyState === 4 && httpRequest.status !== 200) {
          //處理失敗
          rejected(text);
      }
    }
  });
}

實(shí)現(xiàn)一個(gè)私有變量,用getName方法可以訪問(wèn)苍蔬,不能直接訪問(wèn)

  • Object.defineProperty方式
var test = {
  id: 123,
  name: 'Jaimor'
}
Object.defineProperty(test, 'name', {

});
  • 自定義變量形式
function User(id) {
  this.id = id;
  const name = 'Jaimor';
  this.getName = function () {
    return name;
  }
}
const test = new User(123);
console.log(test.id, test.getName(), test.name);  //123, Jaimor, undefined
  • 閉包方式
const Person = (function () {
  let name = 'Tom';
  return function (id, n) {
    this.id = id;
    name = n;
    this.getName = _ => name
  }
})();

箭頭函數(shù)與普通函數(shù)的區(qū)別

  • 普通函數(shù):有原型诱建,可以通過(guò)new創(chuàng)建一個(gè)實(shí)例,有自己的this綁定碟绑。
  • 箭頭函數(shù):
    a) 箭頭函數(shù)是匿名函數(shù)俺猿,不能作為構(gòu)造函數(shù)茎匠,不能使用new。
    b) 箭頭函數(shù)不綁定arguments押袍,可以使用...reset诵冒。
    c) 箭頭函數(shù)不綁定this,會(huì)捕獲其所在的上下文的this作為自己的this值谊惭,同時(shí)call apply bind也不能改變this汽馋。
    d) 箭頭函數(shù)沒(méi)有原型屬性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圈盔,一起剝皮案震驚了整個(gè)濱河市豹芯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌药磺,老刑警劉巖告组,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異癌佩,居然都是意外死亡木缝,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門围辙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)我碟,“玉大人,你說(shuō)我怎么就攤上這事姚建〗冒常” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵掸冤,是天一觀的道長(zhǎng)厘托。 經(jīng)常有香客問(wèn)我,道長(zhǎng)稿湿,這世上最難降的妖魔是什么铅匹? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮饺藤,結(jié)果婚禮上包斑,老公的妹妹穿的比我還像新娘。我一直安慰自己涕俗,他們只是感情好罗丰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著再姑,像睡著了一般萌抵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天绍填,我揣著相機(jī)與錄音萎坷,去河邊找鬼。 笑死沐兰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔽挠。 我是一名探鬼主播住闯,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼澳淑!你這毒婦竟也來(lái)了比原?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杠巡,失蹤者是張志新(化名)和其女友劉穎量窘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氢拥,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚌铜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫩海。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冬殃。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 正文 年R本政府宣布涣觉,位于F島的核電站,受9級(jí)特大地震影響血柳,放射性物質(zhì)發(fā)生泄漏官册。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一混驰、第九天 我趴在偏房一處隱蔽的房頂上張望攀隔。 院中可真熱鬧,春花似錦栖榨、人聲如沸昆汹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)满粗。三九已至,卻和暖如春愚争,著一層夾襖步出監(jiān)牢的瞬間映皆,已是汗流浹背挤聘。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捅彻,地道東北人组去。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像步淹,于是被迫代替她去往敵國(guó)和親从隆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 函數(shù)和對(duì)象 1缭裆、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門語(yǔ)言來(lái)說(shuō)都是核心的概念键闺。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,560評(píng)論 0 5
  • JS基礎(chǔ) 頁(yè)面由三部分組成:html:超文本標(biāo)記語(yǔ)言澈驼,負(fù)責(zé)頁(yè)面結(jié)構(gòu)css:層疊樣式表辛燥,負(fù)責(zé)頁(yè)面樣式j(luò)s:輕量級(jí)的腳...
    小賢筆記閱讀 602評(píng)論 0 5
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,182評(píng)論 0 3
  • js面試篇 1、前端事件流 事件流描述的是從頁(yè)面中接受事件的順序缝其,可以分為:事件捕獲階段 處于目標(biāo)階段 事件冒泡階...
    鋒享前端閱讀 621評(píng)論 0 0
  • 我?guī)缀踉诹c(diǎn)就起床了挎塌。這個(gè)習(xí)慣是高中養(yǎng)成的,現(xiàn)在大學(xué)也是如此氏淑。不過(guò)起床的目的和心理狀態(tài)都和之前完全不一樣了勃蜘。 高中...
    huanyingxia閱讀 420評(píng)論 0 6