摘要:作為對象原型鏈的終點。調用函數時,應該提供的參數沒有提供,該參數等于。它可以用于引用該函數的函數體內當前正在執行的函數。
一 JS ==和===的區別一 JS
二 CSS
===叫做嚴格運算符 ==叫做相等運算符
嚴格運算符比較時不僅僅比較數值還要比較數據類型是否一樣
相等運算符在比較相同類型的數據時,與嚴格相等運算符完全一樣。 在比較不同類型的數據時,相等運算符會先將數據進行類型轉換,然后再用嚴格相等運算符比較。
undefined == null //true undefined === null //false
ps:判斷NaN可以用Object.is()
Object.is(NaN, NaN); //trueundefined和null的區別
首先,undefined和null在if語句中,都會被自動轉為false,即null==undefined結果為true
JS的基本數據類型通常 null表示"沒有對象",即該處不應該有值,一般用法如下:
(1) 作為函數的參數,表示該函數的參數不是對象。
(2) 作為對象原型鏈的終點。Object.getPrototypeOf(Object.prototype) // null
而 undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義,一般用法:
(1)變量被聲明了,但沒有賦值時,就等于undefined。
(2) 調用函數時,應該提供的參數沒有提供,該參數等于undefined。
(3)對象沒有賦值的屬性,該屬性的值為undefined。
(4)函數沒有返回值時,默認返回undefined。
JS中typeof和instanceof用法區別JS基本數據類型有5種
String Number Boolean Null Undefined
以及引用數據類型Object(包括Array Function)
首先typeof用以獲取一個變量類型
typeof一般只能返回如下幾個結果
number boolean string function object undefined
console.log(typeof i); // undefined console.log(typeof 1); // number console.log(typeof "a"); // string console.log(typeof true); // boolean console.log(typeof function () {}); //function console.log(typeof [1, "2", true]); //object console.log(typeof { o: "hello", c: "world" }); //object console.log(typeof null); //object console.log(typeof new Number(2)); //object
以上可知用typeof無法判斷array類型 因為不管是數組還是對象都會返回object
這時候就需要instanceof了
instanceof運算符用來測試一個對象在其原型鏈中是否存在一個構造函數的prototype屬性 即判斷一個變量是否是某個對象的實例
var arr = [1,2,3]; alert(arr instanceof Array); // true
ps:其他判斷方法如下
①Array.isArray
Array.isArray([1, 2, 3]); // true Array.isArray({foo: 123}); // false Array.isArray("foobar"); // false Array.isArray(undefined); // false
② constructor
var arr = [1,2,3]; console.log(arr.constructor === Array); // true
③ Object.prototype.toString.call()
var arr = [1,2,3]; Object.prototype.toString.call(arr) === "[object Array]"; //trueJS用setTimeout遞歸實現setInterval
首先 setTimeout()和setInterval()經常被用來處理延時和定時任務 setTimeout()方法用于在指定的毫秒數后調用函數或計算表達式,而setInterval()則可以在每隔指定的毫秒數循環調用函數或表達式,直到clearInterval把它清除
//setTimeout實現setInterval功能 setTimeout(function(){ //do something setTimeout(arguments.callee,interval); },interval)
ps:為什么要用setTimeout實現setInterval?
JS中的arguments和arguments.calleearguments對象是所有(非箭頭)函數中都可用的局部變量。你可以使用arguments對象在函數中引用函數的參數
callee是 arguments 對象的一個屬性。它可以用于引用該函數的函數體內當前正在執行的函數。這在函數的名稱是未知時很有用,例如在沒有名稱的函數表達式 (也稱為“匿名函數”)內
代碼演示:
此外arguments是類數組對象 其沒有Array的一些方法 但有類似Array的一些特點
將函數的實際參數轉換成數組的方法如下
/** _buffer.slice(); // is equivalent to _buffer.slice(0); // also equivalent to _buffer.slice(0, _buffer.length); **/ var args = Array.prototype.slice.call(arguments)//方法一 var args = [].slice.call(arguments, 0)//方法二 //方法三: var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }JS嚴格模式("use strict")
首先是嚴格模式的用法
// 為整個script標簽開啟嚴格模式, 需要在所有語句之前放一個特定語句 "use strict"; "use strict"; var v = "Hi! I"m a strict mode script!"; //要給某個函數開啟嚴格模式,得把 "use strict";聲明一字不漏地放在函數體所有語句之前 function strict(){ // 函數級別嚴格模式語法 "use strict"; function nested() { return "And so am I!"; } return "Hi! I"m a strict mode function! " + nested(); } function notStrict() { return "I"m not strict."; }
嚴格模式同時改變了語法及運行時行為。變化通常分為這幾類:將問題直接轉化為錯誤(如語法錯誤或運行時錯誤), 簡化了如何為給定名稱的特定變量計算,簡化了 eval 以及 arguments, 將寫"安全"JavaScript的步驟變得更簡單
嚴格模式主要涉及如下幾個方面
創設eval作用域
禁止this關鍵字指向全局對象
禁止在函數內部遍歷調用棧(即禁止使用arguments和callee)
對象不能有重名的屬性
函數不能有重名的參數
函數必須聲明在頂層
...
詳情 請移步阮一峰的 Javascript 嚴格模式詳解
JS閉包JS數組去重的簡潔方法閉包Closure詳見 白話JS閉包
JS中的apply、call、bind主要是利用 ES6 set和filter方法 詳見 最近碰到的sort排序 以及 set和filter數組去重
簡單總結:
① apply 、 call 、bind 三者都是用來改變函數的this對象的指向的;
② apply 、 call 、bind 三者第一個參數都是this要指向的對象,也就是想指定的上下文;
③ apply 、 call 、bind 三者都可以利用后續參數傳參;
④ bind是返回對應函數,便于稍后調用;apply、call則是立即調用
⑤ call 需要把參數按順序一個個傳遞進來,而 apply 則是把參數放在數組里
詳情移步深入淺出妙用 Javascript 中 apply、call、bind
JS的 for in 和 for of簡單說 for in是遍歷key 而 for of是遍歷value
let arr = ["a","b"]; for (a in arr) { console.log(a);//0,1 } for (a of arr) { console.log(a);//a,b }
ps:如何將對象的鍵名輸出數組
當然for in配合hasOwnProperty可以過濾來著原型鏈上繼承得到的屬性
Promise的構造函數接收一個參數,是函數,并且傳入兩個參數:resolve,reject,分別表示異步操作執行成功后的回調函數和異步操作執行失敗后的回調函數。其實這里用“成功”和“失敗”來描述并不準確,按照標準來講,resolve是將Promise的狀態置為fullfiled,reject是將Promise的狀態置為rejected
舉個?
ps:promise詳情請移步大白話講解Promise
二 CSS CSS3的box-sizingrem和em的區別1.content-box 默認值 border和padding不計算入width之內
2.border-box border和padding計算入width之內
居中的幾種方法em是相對于父元素的font-size屬性值來計算的
rem是相對于html標簽的font-size屬性值來計算的
CSS的三種基本引入方式主要是水平居中或者垂直居中
詳見web開發常用的幾種居中形式
//外部樣式表 //內部樣式表 //內聯CSS權重計算這是一個段落。
CSS display: none和visibility: hidden的區別內聯樣式表的權值最高 1000
ID 選擇器的權值為 100
Class 類選擇器的權值為 10
HTML 標簽選擇器的權值為 1
CSS的reflow和repaint①都是隱藏元素,但是前者文檔布局中不占用空間,后者仍占用空間
②display:none隱藏產生reflow和repaint(回流與重繪)
③前者有株連性,即父元素設置display: none后子元素不管怎樣設置都不能顯示,而后者的子元素通過設置visibility: visible后還是能顯示出來的
reflow:當render樹的一部分或者全部因為大小邊距等問題發生改變而需要重建的過程,叫做回流
repaint:當諸如顏色背景等不會引起頁面布局變化,而只需要重新渲染的過程叫做重繪
ps:頁面的顯示過程分為以下幾個階段
1、生成DOM樹(包括display:none的節點)
2、在DOM樹的基礎上根據節點的集合屬性(margin,padding,width,height等)生成render樹(不包括display:none head節點,但是包括visibility:hidden的節點)
3、在render樹的基礎上繼續渲染顏色背景色等樣式
reflow和repaint詳情請移步
未完待續
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/112721.html
摘要:作為對象原型鏈的終點。調用函數時,應該提供的參數沒有提供,該參數等于。它可以用于引用該函數的函數體內當前正在執行的函數。 一 JS 二 CSS 一 JS ==和===的區別 ===叫做嚴格運算符 ==叫做相等運算符嚴格運算符比較時不僅僅比較數值還要比較數據類型是否一樣相等運算符在比較相同類型的數據時,與嚴格相等運算符完全一樣。 在比較不同類型的數據時,相等運算符會先將數據進行類型轉換,...
摘要:獲取的對象范圍方法獲取的是最終應用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據我測試不同環境結果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續更新中……,可以關注下github 項目地址 https:...
摘要:另外回答的時候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點微小的工作,整理了一些之前幾家公司的前端面試題和個人經驗,想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時間久遠難免有些遺漏;很多問題面試官都...
摘要:另外回答的時候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點微小的工作,整理了一些之前幾家公司的前端面試題和個人經驗,想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時間久遠難免有些遺漏;很多問題面試官都...
閱讀 3055·2023-04-26 02:27
閱讀 2770·2021-11-22 13:54
閱讀 909·2021-11-12 10:36
閱讀 3762·2021-10-09 09:44
閱讀 3186·2021-10-09 09:41
閱讀 1231·2021-09-22 10:02
閱讀 2842·2019-08-30 15:56
閱讀 3110·2019-08-30 11:02