JavaScript是前端開發的基礎,下面是本人學習前端過程中覺得容易混淆或者難以區分的一點小小總結。
1.document.documentElement與docuement.body的區別:
document.docuemntElement:是指整個樹節點的根節點,返回的是一個文檔的文檔對象,即<html>標籤,如果沒有該標籤,返回的即爲null。
documeny.body:指的是整個樹節點中的body子節點,即爲<body>標籤
2.兩個等於號(==)與三個等於號(===)
兩個等於號:類似於 '123' == 123;的返回結果,是true,爲什麼呢,因爲左邊的字符串會變爲數字類型123,之後再與右邊的整數123比較,返回的就是true了。
三個等於號(嚴格等於===):類似於 a===b; 會先判斷兩邊的類型是否相同,如果不同則返回false,如果類型相同再進行一步的比較,如數組[1,2] ===[1,2]跟 new Object() === new Object() 這幾個的比較都會返回false,因爲對象的比較,是對象引用的比較,而不是對象值的比較,所以都會返回false。
3.string類型與string 對象類型
可能對很多初學的人來說,不知道var str = "123";與 var strobj = new String("123");的區別,
前者是str是一個基本類型(字符串類型),而後者strobj呢,是一個對象類型,而且這個類型是string的一個包裝類,如下圖所示
4.關於delete與Object.defineProperty
Object.defineProperty()方法會直接在對象上定義一個新的屬性或修改屬性並返回這個對象。例如
var x = {a:1};
Object.defineProperty(x,'a',{
configurable:false, //當configurable的值爲false,delete無法刪除對象的屬性,反之可以
value:2 //該值爲修改對象x的屬性a的值 即 x.a=2
})
delete x.a; //返回false
x.a; //輸出爲2
當用delete刪除對象的某個屬性時,當configurable爲true時,刪除成功。當configurable爲false時,無法刪除。
5.在JavaScript中沒有塊級作用域。
6.函數中的全局變量跟局部變量
function test(){
var x = y = 1;
//這樣確實創建了兩個變量a跟b,且a跟b都等於1,但是創建出來的a爲局部變量,b隱式是全局變量
}
console.log(x);//輸出undefined
console.log(y);//輸出1
7.function test(){}與 var test = function (){}的區別
function test (){}:叫做函數對象或者函數聲明
var test() = function(){}函數預處理
test();//不會報錯 函數聲明預處理或者函數前置
function test(){};
test();//報錯
var test = function(){}
8.關於 for..in...
使用for...in,它的順序是不確定的。
受原型鏈的影響,如果有其它的屬性也會顯示出來。
以上就是幾個關於幾個js的基礎知識。 學生一枚,正在努力學習中,寫得不好或者有寫錯的,請諒解,歡迎指正交流。