摘要:使用結(jié)束后會重新壓扁自己,讓自己不是對象。作用用來判斷某個對象是否含有指定的自身屬性語法參數(shù)要檢測的對象要檢測的屬性名稱。但是函數(shù)作用域外部訪問不到函數(shù)內(nèi)部的變量,對象,函數(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ù)組,對象,應(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]
我的簡單理解: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ù)類型書Number。注意:NaN和任何東西都不相等,包括自己。
3.isNaN(數(shù)據(jù))
會先把數(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ù)點,取整數(shù)。 parseFloat(數(shù)據(jù)):把數(shù)據(jù)轉(zhuǎn)化為數(shù)字,可以是小數(shù)。 注意:這兩個方法會從左往右開始,除去空格,找到第一位非0數(shù)字,開始進行轉(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()也可以進行顯示類型轉(zhuǎn)化,這里不綴述
條件判斷中,除了null,undefined,"",NaN,false,0都轉(zhuǎn)化為false,其余都轉(zhuǎn)化為true。
6.隱式類型轉(zhuǎn)化
只有當加法運算時,其中一方是字符串類型,就會把另一個也轉(zhuǎn)為字符串類型。其他運算只要其中一方是數(shù)字,那么另一方就轉(zhuǎn)為數(shù)字。并且加法運算會觸發(fā)三種類型轉(zhuǎn)換:將值轉(zhuǎn)換為原始值,轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換為字符串。10.拷貝式繼承
11.class繼承 12.函數(shù)作用域,執(zhí)行上下文,變量提升,閉包
1.作用域
JS作用域分為全局作用域和函數(shù)作用域,函數(shù)作用域可以訪問全局作用域中的變量,對象,函數(shù)等。但是函數(shù)作用域外部訪問不到函數(shù)內(nèi)部的變量,對象,函數(shù)。 但在ES6中新增了塊級作用域。let,const在塊中聲明的變量,函數(shù)等,外部都訪問不到。
{ var a=1; let b=2; console.log(b);//2 { console.log(b);//2 } } console.log(a);//1 console.log(b);//報錯,b is not defined
2.執(zhí)行上下文
這里有篇非常好的js執(zhí)行上下文的文章,可以點擊鏈接查看
總結(jié):
1. 調(diào)用函數(shù)是會為其創(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)鍵:變量提升過程中函數(shù)優(yōu)先級高于變量優(yōu)先級
function foo() { console.log(f1); //f1() {} console.log(f2); //undefined var f1 = "hosting"; var f2 = function() {} function f1() {} } foo();
4.閉包
閉包:函數(shù) A 返回了一個函數(shù) B,并且函數(shù) B 中使用了函數(shù) A 的變量,函數(shù) B 就被稱為閉包。
for ( var i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); }
首先因為 setTimeout 是個異步函數(shù),所有會先把循環(huán)全部執(zhí)行完畢,這時候 i 就是 6 了,所以會輸出一堆 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 ); }
點擊這里,閉包進一步了解
13.深淺拷貝1.淺拷貝
首先可以通過 Object.assign 來解決這個問題。
let a = { age: 1 } let b = Object.assign({}, a) a.age = 2 console.log(b.age) // 1
當然我們也可以通過展開運算符(…)來解決
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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/52768.html
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習前端方向,自學(xué),技術(shù)棧時間背景大概是在月日準備好簡歷開始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習 前端方向,自學(xué),vue技術(shù)棧 時間背景 大概是在11月9日準備...
摘要:背景個人背景就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習前端方向,自學(xué),技術(shù)棧時間背景大概是在月日準備好簡歷開始投遞秋招差不多已經(jīng)結(jié)束招聘崗位不多,投遞對象為大一些的互聯(lián)網(wǎng)公司事件背景第一個入職的是好未來的前端實習崗,待遇工 背景 個人背景 就讀于東北某普通二本院校計算機軟件工程專業(yè),現(xiàn)大四,北京實習 前端方向,自學(xué),vue技術(shù)棧 時間背景 大概是在11月9日準備...
摘要:先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開始自學(xué)前端開發(fā),在今年春招實習和秋招的時候投了一些公司,拿到一些京東拼多多虎牙等,總體來說還算滿意,特地寫一篇文章來總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開始自學(xué)前端開發(fā),在今年春招實習和秋招的時候投了一些公司,拿到一些京東拼多多虎牙等,總體來說還算滿意,特地寫一篇文章來總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué),大學(xué)期間開始自學(xué)前端開發(fā),在今年春招實習和秋招的時候投了一些公司,拿到一些京東拼多多虎牙等,總體來說還算滿意,特地寫一篇文章來總結(jié)一下面試的那些套路。 showImg(https://segmentfault.com/img/remote/1460000011897700); 先介紹一下本人應(yīng)屆前端開發(fā)一枚,非科班出身,專業(yè)是化學(xué)...
摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...
閱讀 4620·2021-10-25 09:48
閱讀 3212·2021-09-07 09:59
閱讀 2167·2021-09-06 15:01
閱讀 2693·2021-09-02 15:21
閱讀 2732·2019-08-30 14:14
閱讀 2184·2019-08-29 13:59
閱讀 2514·2019-08-29 11:02
閱讀 2533·2019-08-26 13:33