一、基本語法
1. 基本語句
1. alert(); 瀏覽器彈出一個警告框
2. document.write(); 在body標簽內寫入內容
3. console.log(); 在控制臺中輸出結果 控制臺查看方法 F12 console
2. JS中嚴格區分大小寫
3. JS中每一條語句以(;)分號結尾 注意: 英文狀態下的分號
1. 如果不寫分號,瀏覽器會自動添加,但是會消耗一些系統資源
2. 而且有的時候,瀏覽器會加錯分號,所以在開發中分號必須寫
4. JS中會忽略多個空格和換行,所以我們可以利用空格和換行對代碼進行格式化
# 二、字面量與變量
1.字面量,都是一些不可改變的值 比如:
? 1 2 3 4 5 這些數字就是字面量 特點: 不會被改變 1 在未來的某一天會變為其他值嗎??
? 字面量都是可以直接使用的,但是我們一般不會直接使用字面量
? 比如: 字面量 12345646464654 我在第一行代碼中使用了 并且在 一萬行的時候也使用了該字面量。 容易出錯,不方便使用。
? 2.變量
? 變量可以用來保存字面量,而且變量的值也是可以任意改變的
? 變量更加方便我們使用,所以在開發中都是通過變量去保存一個字面量,而很少直接使用字面量
? 變量怎么使用呢?
聲明變量
在js中使用`var`關鍵字來聲明一個變量
```
端開發過程中少不了字符串的拼接,然而拼接方式很多,具體如下:
1.通過'+'進行拼接
var arr =['今天',昨天','明天'];
$(
'<div class="show">'+
'<ul class="app">'+
'<li>'+arr[0]+'</li>'+
'<li>'+arr[1]+'</li>'+
'<li>'+arr[2]+'</li>'+
'</ul>'+
'</div>'
).appendTo('.bo')//創建新的節點并插入到.bo
這種方法大家最常用,但是有個不好的就是 自己在做模版的時候,常常會因為少寫或者多寫分號而出錯,而且這種出錯不易察覺,時常會浪費很多寶貴的時間。
2.通過數組去拼接
var arr =['今天','昨天','明天'];
var str ='';
str+=['<div class="show">',
'<ul>',
'<li><a href="">'+arr[0]+'</a></li>',
'<li><a href="">'+arr[1]+'</a></li>',
'<li><a href="">'+arr[2]+'</a></li>',
'</ul>',
'</div>'
].join('');
$('.bo').append(str);
這種方式顯得高大上一些,而且使用的頻率也非常大。博主經常會使用這種方式,因為這種方式不容易出錯,及時出錯了也可以立馬發現錯誤。
3.最近新學的一種字符串拼接方式,比前面兩種方式顯得更為簡潔一些
var dataList = '<div id="box">\
<ul class="LearnList">\
<li class="list">HTML</li>\
<li class="list">CSS</li>\
<li class="list">JS</li>\
<li class="list">NODE</li>\
<li class="list">ANGLUAR</li>\
<li class="list">JSON</li>\
</ul>\
</div>'
第三種方法比較靈活,這種方式要注意一點,也是實現的關鍵:每一行的最后,都加上轉義斜線\,但沒有后續字符,只有個\。
在這里我留一個問題大家可以看看es6的模板字符串章節,拼字符串是非常高效的
喜歡我的可以點關注哦。我會時刻分享干貨給各位。謝謝
乎所有JavaScript的數據要么是一個對象要么從對象中獲取,連函數在JavaScript中也被視為對象,使用和理解對象是理解整個JavaScript的關鍵。
JavaScript雖然沒有類的概念,但依然存在兩種類型:原始類型和引用類型。
原始類型保存為簡單數據值,引用類型則保存為對象,其本質是指向內存位置的引用。
其他編程語言用棧儲存原始類型,用堆儲存引用類型,JavaScript則完全不同:它使用一個變量對象追蹤變量的生存期。原始值被直接保存在變量對象內,而引用值則作為一個指針保存在變量對象內,該指針指向實際對象在內存中的存儲位置。
原始類型代表照原樣保存的一些簡單數據,JavaScript共有5種原始類型:
前三種類型表現的行為類似,而后兩種則有一點區別。
原始類型的變量直接保存原始值,而不是一個指向對象的指針。當你將原始值賦給一個變量時,該值將被復制到變量中。也就是說,如果你使一個變量等于另一個時,每個變量有它自己的一份數據拷貝。每個含有原始值的變量使用自己的存儲空間,一個變量的改變不會影響到其他變量。
鑒別原始值的最佳方法是使用typeof操作符,它可以被用在任何變量上,并返回一個說明數據類型的字符串,typeof操作符可用于字符串、數字、布爾和未定義類型。
當運行typeof null時,結果是“object”,在邏輯上,你可以認為null是一個空的對象指針,所以結果為“object”。
判斷一個值是否為空類型的最佳方法是直接和null比較:
console.log(value === null); //true or false
在這段代碼中使用了三等號的全等操作符,而不是雙等號。全等操作符在進行比較時不會將變量強制轉換為另一種類型。
雖然字符串、數字和布爾是原始類型,但是它們也擁有方法(null和undefined沒有方法)。盡管原始類型擁有方法,但它們不是對象。JavaScript使它們看上去像對象一樣,以此來提供語言上的一致性體驗。
引用類型是指JavaScript中的對象,同時也是你在該語言中能找到的最接近類的東西。引用值是引用類型的實例,也是對象的同義詞。對象是屬性的無序列表,屬性包含鍵和值。如果一個屬性的值是函數,它就被稱為方法。JavaScript中函數其實是引用值,除了函數可以運行以外,一個包含數組的屬性和一個包含函數的屬性沒有什么區別。當然,在使用對象前,你必須先創建它們。
JavaScript有好幾種方法可以創建對象,或者說是實例化對象。第一種是使用new操作符和構造函數,構造函數就是通過new操作符來創建對象的函數——任何函數都可以是構造函數。
var object = new Object( );
因為引用類型不在變量中直接保存對象,所以以上代碼中的object變量實際上并不包含對象的實例,而是一個指向內存中實際對象所在位置的指針,或者說引用。這是對象和原始值之間的一個基本差別,原始值是直接保存在變量中的。
當你將一個對象賦值給變量時,實際是賦值給這個變量一個指針。這意味著,將一個變量賦值給另一個變量時,兩個變量各獲得了一個指針的拷貝,指向內存中的同一個對象。
JavaScript語言有垃圾收集的功能,因此當你使用引用類型時無需擔心內存分配,但最好在不使用對象時將其引用解除,讓垃圾收集器對那塊內存進行釋放,解除引用的最佳手段是將對象變量置為null。
在JavaScript中,對象另一個有趣的方面是你可以隨時添加和刪除其屬性。
內建引用類型有字面形式,字面形式允許你在不需要使用new操作符和構造函數顯式創建對象的情況下生成引用值。
要用對象字面形式創建對象,可以在大括號內定義一個新對象及其屬性。屬性的組成包括一個標識符或字符串、一個冒號以及一個值,多個屬性之間用逗號隔開:
var book = { name: "JavaScript", year: "2018" };
屬性名字也可以用字符串表示,特別是當你希望名字中包含空格或其它特殊字符時。
雖然使用字面形式并沒有調用new Object( ),但是JavaScript引擎背后做的工作和new Object( )一樣,除了沒有調用構造函數,其它引用類型的字面形式也是如此。
定義數組的字面形式是在中括號內用逗號區分的任意數量的值:
var colors = ["red" , "blue" , "green"]; var colors1 = new Array("red" , "blue" , "green");
定義函數基本上都要用字面形式。 用構造函數創建的函數沒什么好的調試方法:JavaScript調試器認不出這些函數,它們在程序里就好像黑盒一樣。
JavaScript允許使用字面形式而不是使用RegExp構造函數定義正則表達式。模式被包含在兩個"/"之間,第二個"/"后是由單字符表示的額外選項。
使用字面形式比較方便的一個原因是你不需要擔心字符串中的轉義字符。如果使用RegExp構造函數,傳入模式的參數是一個字符串,你需要對任何反斜杠進行轉義。在JavaScript中,除非需要通過一個或多個字符串動態構造正則表達式,否則都建議使用字面形式而不是構造函數。
屬性是對象中保存的名字和值的配對。點號是JavaScript中訪問屬性的最通用做法,不過也可以用中括號訪問JavaScript對象的屬性。在需要動態決定訪問哪個屬性時,使用中括號特別有用。除了語法不同,在性能或其他方面點號和中括號都大致相同,唯一區別在于中括號允許你在屬性名字上使用特殊字符。
函數時最容易鑒別的引用類型,因為對函數使用typeof操作符時,返回值是"function"。對于所有非函數的引用類型,typeof返回"object"。為了更方便的鑒別引用類型,可以使用JavaScript的instanceof操作符。instanceof操作符以一個對象和一個構造函數為參數,如果對象是構造函數所指定的類型的一個實例,instanceof返回true;否則返回false。
instanceof操作符可鑒別繼承類型,這意味著所有對象都是Object的實例,因為所有引用類型都繼承自Object。
ECMAScript5引入了Array.isArray( )來明確鑒別一個值是否為Array的實例,無論該值來自哪里,該方法對來自任何上下文的數組都返回true。
原始封裝類型共有三種(String、Number和Boolean)。這些特殊引用類型的存在使得原始類型用起來和對象一樣方便。當讀取字符串、數字或布爾值時,原始封裝類型將被自動創建。
字符串對象的存在僅用于改語句并在隨后被銷毀,一種稱為自動打包的過程:
var name = "Nicholas"; name.last = "Zakas"; console.log(name.last); //undefined
這段代碼試圖給name添加last屬性,代碼運行時沒有錯誤,但是屬性卻消失了。你可以在任何時候給一個真的對象添加屬性,屬性會保留至你手動刪除它們。原始封裝類型的屬性會消失是因為被添加屬性的對象立刻就被銷毀了。
上例中,實際上是在一個立刻就被銷毀的對象上而不是字符串上添加了新的屬性。之后當你試圖訪問該屬性時,另一個不同的臨時對象被創建,而新屬性并不存在。
雖然原始封裝類型會被自動創建,在這些值上進行instanceof檢查對應類型的返回值卻都是false。這是因為臨時對象僅在值被讀取時創建,instanceof操作符并沒有真的讀取任何東西,也就沒有臨時對象的創建,于是它告訴我們這些值并不屬于原始封裝類型。
也可以手動創建原始封裝類型,但有某些副作用,手動創建原始封裝類型實際會創建出一個object,這意味著typeof無法鑒別出你實際保存的數據類型。
使用String、Number和Boolean對象和使用原始值有一定區別:
var found = new Boolean(false); if (found) { console.log("Found"); //this executes }
這是因為一個對象在條件判斷語句中總被認為是true,無論該對象的值是不是等于false。
手工創建的原始封裝類型在其他地方也很容易讓人誤解,在大多數情況下都只會導致錯誤。所以,除非有特殊情況,應該避免這么做。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。