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