摘要:使用結(jié)束后會(huì)重新壓扁自己,讓自己不是對(duì)象。作用用來(lái)判斷某個(gè)對(duì)象是否含有指定的自身屬性語(yǔ)法參數(shù)要檢測(cè)的對(duì)象要檢測(cè)的屬性名稱。但是函數(shù)作用域外部訪問(wèn)不到函數(shù)內(nèi)部的變量,對(duì)象,函數(shù)。
1.JS內(nèi)置類型
分為基本數(shù)據(jù)類型和Object.
基本數(shù)據(jù)類型有:null,undefined,string,boolean,number,symbol.
console.log(typeof null);//object console.log(typeof []);//object console.log(typeof {});//object
如果想要區(qū)分null,數(shù)組,對(duì)象,應(yīng)該怎么辦?
console.log(Object.prototype.toString.call(null));//[object Null] console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call({}));//[object Object]
我的簡(jiǎn)單理解:toString(數(shù)據(jù));作用:將數(shù)據(jù)轉(zhuǎn)化為字符串。
2.類型轉(zhuǎn)化類型轉(zhuǎn)化:分為顯示類型轉(zhuǎn)化,和隱式類型轉(zhuǎn)化。
1.Number(數(shù)據(jù))
如果數(shù)據(jù)內(nèi)容式純粹的數(shù)字,才可以轉(zhuǎn)化為數(shù)字,否則式NaN。
var str2="12px";//NaN var str2="1.2";//1.2 var str2="1.2.3";//NaN var str2=null;//0 console.log(Number(str2));
2.NaN
NaN的數(shù)據(jù)類型書(shū)Number。注意:NaN和任何東西都不相等,包括自己。
3.isNaN(數(shù)據(jù))
會(huì)先把數(shù)據(jù)用Number轉(zhuǎn)化,轉(zhuǎn)化完了之后在判斷是不是NaN,如果是NaN則返回為true。否則返回為fasle。
console.log(isNaN(1));//false console.log(isNaN("123"));//false console.log(isNaN("abc"));//true
4.parseInt(數(shù)據(jù))和parseFloat(數(shù)據(jù))
parseInt(數(shù)據(jù)):把數(shù)據(jù)變成整數(shù),舍去小數(shù)點(diǎn),取整數(shù)。 parseFloat(數(shù)據(jù)):把數(shù)據(jù)轉(zhuǎn)化為數(shù)字,可以是小數(shù)。 注意:這兩個(gè)方法會(huì)從左往右開(kāi)始,除去空格,找到第一位非0數(shù)字,開(kāi)始進(jìn)行轉(zhuǎn)換,直到轉(zhuǎn)換到不是數(shù)字的那位為止,或者,轉(zhuǎn)換出合適的值為止。
console.log( parseInt( "1" ) );//1 console.log( parseInt( "1.9" ) );//1 console.log( parseInt( "20px" ) );//20 console.log( parseInt( " 25px" ) );//25 console.log( parseInt( " 0.0026px" ) );//0 console.log( parseFloat( " 0.0026px" ) );//0.0026
5.Stirng( )和Boolean()也可以進(jìn)行顯示類型轉(zhuǎn)化,這里不綴述
條件判斷中,除了null,undefined,"",NaN,false,0都轉(zhuǎn)化為false,其余都轉(zhuǎn)化為true。
6.隱式類型轉(zhuǎn)化
只有當(dāng)加法運(yùn)算時(shí),其中一方是字符串類型,就會(huì)把另一個(gè)也轉(zhuǎn)為字符串類型。其他運(yùn)算只要其中一方是數(shù)字,那么另一方就轉(zhuǎn)為數(shù)字。并且加法運(yùn)算會(huì)觸發(fā)三種類型轉(zhuǎn)換:將值轉(zhuǎn)換為原始值,轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換為字符串。10.拷貝式繼承
11.class繼承 12.函數(shù)作用域,執(zhí)行上下文,變量提升,閉包
1.作用域
JS作用域分為全局作用域和函數(shù)作用域,函數(shù)作用域可以訪問(wèn)全局作用域中的變量,對(duì)象,函數(shù)等。但是函數(shù)作用域外部訪問(wèn)不到函數(shù)內(nèi)部的變量,對(duì)象,函數(shù)。 但在ES6中新增了塊級(jí)作用域。let,const在塊中聲明的變量,函數(shù)等,外部都訪問(wèn)不到。
{ var a=1; let b=2; console.log(b);//2 { console.log(b);//2 } } console.log(a);//1 console.log(b);//報(bào)錯(cuò),b is not defined
2.執(zhí)行上下文
這里有篇非常好的js執(zhí)行上下文的文章,可以點(diǎn)擊鏈接查看
總結(jié):
1. 調(diào)用函數(shù)是會(huì)為其創(chuàng)建執(zhí)行上下文,并壓入執(zhí)行環(huán)境棧的棧頂,執(zhí)行完畢彈出,執(zhí)行上下文被銷毀,隨之VO也被銷毀 2. EC創(chuàng)建階段分創(chuàng)建階段和代碼執(zhí)行階段 3. 創(chuàng)建階段初始變量值為undefined,執(zhí)行階段才為變量賦值 4. 函數(shù)申明先于變量申明
3.變量提升(域解析)
關(guān)鍵:變量提升過(guò)程中函數(shù)優(yōu)先級(jí)高于變量?jī)?yōu)先級(jí)
function foo() { console.log(f1); //f1() {} console.log(f2); //undefined var f1 = "hosting"; var f2 = function() {} function f1() {} } foo();
4.閉包
閉包:函數(shù) A 返回了一個(gè)函數(shù) B,并且函數(shù) B 中使用了函數(shù) A 的變量,函數(shù) B 就被稱為閉包。
for ( var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); }
首先因?yàn)?setTimeout 是個(gè)異步函數(shù),所有會(huì)先把循環(huán)全部執(zhí)行完畢,這時(shí)候 i 就是 6 了,所以會(huì)輸出一堆 6。
解決方法一:
for (var i = 1; i <= 5; i++) { (function(j) { setTimeout(function timer() { console.log(j); }, j * 1000); })(i); }
解決方法二:
for ( var i=1; i<=5; i++) { setTimeout( function timer(j) { console.log( j ); }, i*1000, i); }
解決方法三:
for ( let i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); }
點(diǎn)擊這里,閉包進(jìn)一步了解
13.深淺拷貝1.淺拷貝
首先可以通過(guò) Object.assign 來(lái)解決這個(gè)問(wèn)題。
let a = { age: 1 } let b = Object.assign({}, a) a.age = 2 console.log(b.age) // 1
當(dāng)然我們也可以通過(guò)展開(kāi)運(yùn)算符(…)來(lái)解決
let a = { age: 1 } let b = {...a} a.age = 2 console.log(b.age) // 1
2.深拷貝
function cloneFn( sourse ){ var o = Object.prototype.toString.call(sourse).toLowerCase().indexOf("array")!==-1 ? [] : {}; for( var attr in sourse ){ if( (typeof sourse[attr] === "object") && sourse[attr] !== null ){ o[attr] = cloneFn( sourse[attr] ) ; }else{ o[attr] = sourse[attr]; } } return o; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96550.html
摘要:背景個(gè)人背景就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專業(yè),現(xiàn)大四,北京實(shí)習(xí)前端方向,自學(xué),技術(shù)棧時(shí)間背景大概是在月日準(zhǔn)備好簡(jiǎn)歷開(kāi)始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對(duì)象為大一些的互聯(lián)網(wǎng)公司事件背景第一個(gè)入職的是好未來(lái)的前端實(shí)習(xí)崗,待遇工 背景 個(gè)人背景 就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專業(yè),現(xiàn)大四,北京實(shí)習(xí) 前端方向,自學(xué),vue技術(shù)棧 時(shí)間背景 大概是在11月9日準(zhǔn)備...
摘要:背景個(gè)人背景就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專業(yè),現(xiàn)大四,北京實(shí)習(xí)前端方向,自學(xué),技術(shù)棧時(shí)間背景大概是在月日準(zhǔn)備好簡(jiǎn)歷開(kāi)始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對(duì)象為大一些的互聯(lián)網(wǎng)公司事件背景第一個(gè)入職的是好未來(lái)的前端實(shí)習(xí)崗,待遇工 背景 個(gè)人背景 就讀于東北某普通二本院校計(jì)算機(jī)軟件工程專業(yè),現(xiàn)大四,北京實(shí)習(xí) 前端方向,自學(xué),vue技術(shù)棧 時(shí)間背景 大概是在11月9日準(zhǔn)備...
摘要:先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開(kāi)始自學(xué)前端開(kāi)發(fā),在今年春招實(shí)習(xí)和秋招的時(shí)候投了一些公司,拿到一些京東拼多多虎牙等,總體來(lái)說(shuō)還算滿意,特地寫(xiě)一篇文章來(lái)總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開(kāi)始自學(xué)前端開(kāi)發(fā),在今年春招實(shí)習(xí)和秋招的時(shí)候投了一些公司,拿到一些京東拼多多虎牙等,總體來(lái)說(shuō)還算滿意,特地寫(xiě)一篇文章來(lái)總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開(kāi)始自學(xué)前端開(kāi)發(fā),在今年春招實(shí)習(xí)和秋招的時(shí)候投了一些公司,拿到一些京東拼多多虎牙等,總體來(lái)說(shuō)還算滿意,特地寫(xiě)一篇文章來(lái)總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開(kāi)發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
閱讀 2839·2023-04-25 20:06
閱讀 1454·2021-08-26 14:15
閱讀 2244·2021-08-12 13:27
閱讀 1782·2019-08-30 15:55
閱讀 3480·2019-08-30 13:20
閱讀 2836·2019-08-29 15:12
閱讀 3340·2019-08-29 15:06
閱讀 2871·2019-08-29 14:13