js錯誤總結

容易犯的錯誤原因

認為是split()使用排除法:split分割字符串;reverse反轉數組;join將數組轉成字符串

trim()?? 去除字符串兩端空格

return 只能在函數內部使用在循環(huán)中也是使用,setInterval(fn1,1000) 只會調用一次 fn1

var str = "hello world";console.log( str. substring(2,7) )輸出llo w

if(!this._num&&this._num!==0)return this._num=1

;//如果這里的條件是!this._num

在這里因為當this._num為0的時候他就會返回一個1,

??????? //而下面我們設置了this.num--;在這里減1之后this.num就變成了0他就會回到set方法中的value把值賦值給input的值

??????? //接著下面get中的this._num的值也就變成了0,然后this._num的值又變成了1在執(zhí)行上面說的,這樣就造成了死循環(huán),

undefined 和 null 的區(qū)別與聯系null和其它語言的用法類似,表示沒有對象,算數運算時會被轉換為0,容易混淆,不確定是變量未定義、被賦值為null、還是本身值就是0。所以增加了undefined類型,表示缺少值,算數運算不會被轉換為0,而是NaN。

NaN是number類型的全局屬性,和Number.NaN等效,表示非數字不能用NaN來判斷非數字,因為NaN和NaN也是不相等的

document.write要在文檔加載完畢后使用,否則會覆蓋整個文檔,這時會發(fā)現頁面被清空了,只輸出了document.write輸出的內容

"8" + 8; // 88 ;8 + "8"; // 88 ;parseInt("8") + 8; // 16數字和字符串相加,無論順序如何,數字都會被轉換為字符串:

函數內部的變量,如果沒有使用var聲明仍然是全局變量,生命周期直到頁面關閉

在面向對象中計時器的this計時器中的this永遠都是window

var str = "hello world";?? console.log( str. substring(2,7) )輸出什么

輸出llo w

能夠正確隨機獲取數組中元素的是 var arr = [“

張三”,“李四”,“王二”,“二哈”]

要隨機獲取數組的內容,只要能生成隨機下標即可,arr的下標是0到arr.length-1之間,所以只要能生成0到3的隨機正數即可;

A選項:Math.random() * (arr.length-1) 得到 0.0001-2.9999的隨機數,Math.round()方法作用是四舍五入,經過該方法:得到0-3之間的隨機數,正確;

B選項:Math.random() * arr.length得到0.0001-3.9999的隨機數,parseInt( )方法能取整數部分,經過該方法:得到0-3之間的隨機數,正確;

C選項:Math.random() * (arr.length) 得到0.0001-3.9999的隨機數,四舍五入后:得到0-4之間的隨機數,錯誤

D選項:Math.random() * (arr.length-1)得到 0.0001-2.9999的隨機數,parseInt( )方法取整后:得到0-2之間的隨機數,錯誤

以下關于div~p選擇符說法正確是通用兄弟選擇器(E ? F)

通用兄弟元素選擇器是CSS3新增加一種選擇器,這種選擇器將選擇某元素后面的所有兄弟元素,他們也和相鄰兄弟元素類似,需要在同一個父元素之中.

以下哪個屬性不能隱藏元素隱藏一個元素有3種方式,display:none;visibility:hidden;opacity:0;所以除了這3個之外

的overflow:hidden,表示的是溢出隱藏,所以選擇A。

設置彈性子元素各行之間對齊的屬性是?flex-wrap屬性用于指定彈性盒子的子元素換行方式,space-between是彈性子元素在主軸對其方

式的屬性值,align-content子元素各行直接的對齊屬性,align-items子元素的側軸對齊方式屬性

flex-direction設置子元素縱向反轉排列的屬性是row橫向排列,column縱向排列,row-reverse橫向翻轉,column-reverse縱向翻轉

以下哪些是H5能支持的視頻文件格式格式??? IE???? Firefox? Opera??? Chrome?? Safari?? No?? 5.0+? 3.0+

Ogg? No?? 3.5+?? 10.5+? 5.0+?? No MPEG4? 9.0+?? No? WebM? No? 4.0+

10.6+?? 6.0+?? No

觸發(fā)BFC的條件有1.float的值不為none2.overflow的值不為visible

3.display的值為table-cell、tabble-caption和inline-block之一

4.position的值不為static或則releative中的任何一個

需要給img添加什么聲明,可以解決圖片下方間隙的問題float:left;vertical-align:top;display:block圖片間隙由文字默認對齊導致 只要讓文字不

在左下方或右下方顯示就沒問題

Javascript中,假設 foo 對象有 att 屬性,那么以下獲取att屬性值的

表達式哪個是錯誤的

訪問一個對象的屬性有兩種方式:

1. foo.att2. foo["att"]

for..of與for..in的區(qū)別,以下說法正確的是for in可以遍歷對象,for of不能遍歷對象

事件中會產生哪些兼容問題事件對象的創(chuàng)建,事件冒泡,瀏覽器的默認行為,事件委托中事件源的獲取

字符串的操作方法有indexOf ;lastIndexOf; charAt;charCodeAt

解構賦值可以做到以下哪些事一次性可以定義多個變量;可以作用在函數的傳參上,以對象的方式傳遞,參數順序也無須保持一致

?可以輕松實現兩個數的交換; 可以實現一個函數返回多個結果

var p = {username:"leson"}獲取p對象里面leson正確的做法為對象屬性訪問方式:obj.name或obj["name"]

php中對數組下標說法正確的是數組的下標可以是字符串,是數字,null,true,false等

下面有關javascript系統(tǒng)方法的描述,正確的是parseFloat方法:該方法可以將一個字符串轉換成對應的小數

parseInt方法:該方法可以將一個字符串轉換成對應的整數

Number方法 : 該方法可以將某個數據類型轉成數值類型

Boolean方法 : 該方法可以將某個數據類型轉成布爾類型

選出有兼容性的方法或者屬性?? event.returnValue = false;}else { e.preventDefault();};

srcElement; addEventListener;stopPropagation;preventDefault

HTML表單的首要標記是,標記的參數method表示表單發(fā)送的

方法,可能為get或post,下列關于get和post的描述不正確的是

關于get和post請求的特點

答案A:post方法傳遞的數據對客戶端是不可見的

答案B:get請求攜帶數據大小與瀏覽器和服務器對url長度限制有關,為保證兼容性,最好不要超過2kb

答案C:post請求攜帶的數據大小理論上是沒有限制的,HTTP協(xié)議規(guī)范也沒有進行大小限制,具體大小由瀏覽器和服務器對數據的處理能力決定。

答案D:get方法把數據暴露在url中以查詢串的方式傳遞,因此是對客戶端來說是可見的。

因此 BCD都不正確

function func(){return 1;}alert(func);alert(func());函數加()和不加() 的區(qū)別,加()是直接調用這個函數,不加是函數本身

返回值定義:一個函數實際上就是一個計算過程,計算完成之后的結果就是返回值。arguments是存儲了函數傳送過過來實參,arguments對象的長度是由實參個數而不是形參個數決定的

var o={ fn:function (){console.log(fn);}};o.fn();//ERROR報錯在函數表達式內部能不能訪問存放當前函數的變量

function fn(a) { console.log(a);// function a() {alert(1)}

var a = 2; function a() {alert(1)} console.log(a);//2? }fn(1);

預解析時找到了變量a,并且賦值為undefined,找到了聲明function a(){alert(1)},為

整個函數體;兩者同名,所以聲明覆蓋了變量a的值,a不再是undefined的,而是函數體。

if('a' in window) {??

??? var a = 10;

}?

console.log(a);  // 10

變量提升、window的變量

var a;

if ('a' in window) { a = 10;}

if(){}的花括號并不像function(){}的花括號一樣,具有自己的塊級作用域,if的花括號還是全

局的環(huán)境。根據JavaScript的變量提升機制,var a會被js引擎解釋到第一行,

let username='守候'

function fn(){alert(this.username);//undefined}fn();

可能大家會困惑,為什么不是輸出守候,但是在細看一看,我聲明的方式是let,不會是window對象var username='守候' function fn(){ alert(this.username);//守候 } fn(); //--------------- window.username='守候' function fn(){ alert(this.username);//守候 } fn();

這個相信不難理解,就是那個函數調用,this指向哪里

window.b=2222 let obj={ a:111, fn:function(){ alert(this.a);//111 alert(this.b);//undefined } } obj.fn();

很明顯,第一次就是輸出obj.a,就是111。而第二次,obj沒有b這個屬性,所以輸出undefined,

因為this指向obj。

let obj1={ a:222 }; let obj2={ a:111, fn:function()

{ alert(this.a); } } obj1.fn=obj2.fn; obj1.fn();//222

這個相信也不難理解,雖然obj1.fn是從obj2.fn賦值而來,但是調用函數的是obj1,

所以this指向obj1。

let TestClass=function(){ this.name='111'; }

?let subClass=new TestClass(); subClass.name='守候';

console.log(subClass.name);//守候 let subClass1=new TestClass();

?console.log(subClass1.name)//111

但是有一個坑,雖然一般不會出現,但是有必要提一下。

在構造函數里面返回一個對象,會直接返回這個對象,而不是執(zhí)行構造函數后創(chuàng)建的對象

let obj1={ a:222 }; let obj2={ a:111,

fn:function(){ alert(this.a); } } obj2.fn.call(obj1);

此時雖然是 obj2 調用方法,但是使用 了call,動態(tài)的把 this 指向到 obj1。相當于這個

obj2.fn 這個執(zhí)行環(huán)境是 obj1 。apply 和 call 詳細內容在下面提及。

let obj={ a:222, fn:function(){ setTimeout(function()

{console.log(this.a)}) } }; obj.fn();//undefined

不難發(fā)現,雖然 fn() 里面的 this 是指向 obj ,但是,傳給 setTimeout 的是普通函數

this 指向是 window , window下面沒有 a ,所以這里輸出 undefined 。

let obj={ a:222, fn:function(){ setTimeout(()=>

{console.log(this.a)}); } }; obj.fn();//222

這次輸出 222 是因為,傳給 setTimeout 的是箭頭函數,然后箭頭函數里面沒有 this,

所以要向上層作用域查找,在這個例子上, setTimeout 的上層作用域是 fn。而 fn 里面的

this 指向 obj ,所以 setTimeout 里面的箭頭函數的 this ,指向 obj 。所以輸出 222 。

let add=(function(){ let now=0; return

{ doAdd:function(){ now++; console.log(now); } } })()

now 這個變量,并沒有隨著函數的執(zhí)行完畢而被回收,而是繼續(xù)保存在內存里面

然后把這個對象賦值給 add 。由于 add 里面有函數是依賴于 now 這個變量

。所以 now 不會被銷毀,回收。這就是閉包的用途之一(延續(xù)變量周期)。

由于 now 在外面訪問不到,這就是閉包的另一個用途(創(chuàng)建局部變量,保護局部變量不會被訪問

和修改)。

[]==[][] == [] 這個好理解. 當兩個值都是對象 (引用值) 時, 比較的是兩個引用值在內存中是否是

同一個對象. 因為此 [] 非彼 [], 雖然同為空數組, 確是兩個互不相關的空數組, 自然 == 為 false.

計時器計時器里里面的對象都是window

函數嵌套函數外層函數執(zhí)行返回里層函數(不是返回里層函數的執(zhí)行結果)

在面向對象中的this再添加事件函數的時候前面要加this并且考慮是否要bind this

"1"+undefined//=>"1undefined";1+null//數值轉換null=>0,結果1相當于執(zhí)行字符串拼接

true+true//2;1+undefined//數值轉換undefined=>NaN,結果NaN布爾值轉換為數字后講加

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容