[Book]學習JavaScript數據結構與算法:第1章“JavaScript簡介”

目錄:

  • 第1章“JavaScript簡介”
  • 第2章“數組”
  • 第3章“棧”
  • 第4章“隊列”
  • 第5章“鏈表”
  • 第6章“集合”
  • 第7章“字典和散列表”
  • 第8章“樹”
  • 第9章“圖”
  • 第10章“排序和搜索算法”
  • 第11章“算法補充知識”

第1章 JavaScript簡介

一.JavaScript 基礎

1.在HTML中編寫JavaScript的兩種方式
第一種方式

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
</head>
<body>
 <script>
 alert('Hello, World!');
 </script>
</body>
</html> 

第二種方式

創建一個JavaScript文件(比如01-HelloWorld.js),
在裏面寫入如下代碼:
alert('Hello, World!');
然後,我們的HTML文件看起來如下:
<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
</head>
<body>
 <script src="01-HelloWorld.js">
 </script>
</body>
</html> 

這兩個例子,無論執行哪個輸出都是一樣的。但第二個例子是最佳實踐。
作爲最佳實踐,我們會在關閉body標籤前引入
JavaScript代碼。
這樣瀏覽器就會在加載腳本之前解析和顯示HTML,有利於提升
頁面的性能

2.變量
變量保存的數據可以在需要時設置、更新或提取。賦給變量的值都有對應的類型。
JavaScript的類型有數字、字符串、布爾值、函數和對象。還undefined和null,以及數組、日期和正則表達式

var可以聲明一個js變量。但是js不是強類型語言,後面在聲明相同名稱變量的話,會把之前的覆蓋也就是更新;

	var num=1;
    var num=222;
    console.log(num);//222
	var n;
    console.log(n);//undefined
    undefined表示變量已被聲明,但尚未賦值

3.輸出JavaScript值的三種方式:

第一種是
	alert('Mytext here'),將輸出到瀏覽器的警示窗口;
第二種是
	console.log('My texthere'),將把文本輸出到調試工具的Console標籤
第三種方式是直接輸出到HTML頁面裏並被瀏覽器,
	通過document.write('My text here')。
console.log("num: " + num)
寫法相同
console.log("num: ", num)

4.變量作用域
本地變量和全局變量兩種

 var myVaribale = 'global';
    myOtherVariable = 'global_name';
    function myFunction() {
        var myVaribale = 'local';
        return myVaribale;
    }
    function myOtherFunction() {
        myOtherVariable = 'local_name';
        return myOtherVariable;
    }
    
    console.log(myVaribale); //global 全局變量
    
    console.log(myFunction()); //local 局部變量
    
    console.log(myOtherVariable); //global_name 全局變量
    
    console.log(myOtherFunction()); //local_name{在myOtherFunction函數裏,因爲沒有使用var關鍵字修飾,所以這裏引用的是全局變量
    
    console.log(myOtherVariable); //{local_name 因爲在函數myOtherFunction裏修改了myOtherVariable的值

在這裏插入圖片描述
過在JavaScript裏應該儘量少用全局變量,這是對的。通常,代碼質量可以用全局變量和函數的數量來考量(數量越多越糟)。因此,儘可能避免使用全局變量

5.操作符
在JavaScript裏有:

  • 算數操作符、
  • 賦值操作符、
  • 比較操作符、
  • 邏輯操作符、
  • 位操作符、
  • 一元操作符
  • 其他操作符

算數操作符
在這裏插入圖片描述
賦值操作符
在這裏插入圖片描述
比較操作符
在這裏插入圖片描述
邏輯操作符
在這裏插入圖片描述
位操作符

console.log('5 & 1:', (5 & 1));//5 & 1: 1二進制與運算
    console.log('5 | 1:', (5 | 1));//5 | 1: 5二進制或運算
    console.log('~ 5:', (~5));//~ 5: -6二進制非運算
    console.log('5 ^ 1:', (5 ^ 1));//5 ^ 1: 4二進制異或運算
    console.log('5 << 1:', (5 << 1));//5 << 1: 10左移
    console.log('5 >> 1:', (5 >> 1));//5 >> 1: 2右移
    console.log('~ 2:', (~2));
    
    (~)非運算:先把數字轉化爲二進制(8位),取反(補碼)
    轉化規則:第一位不動是符號位
    把補碼-1得到的8位除了第一位符號位不動;其他都取反,得到的就是反碼

在這裏插入圖片描述
在這裏插入圖片描述
typeof操作符可以返回變量或表達式的類型

JavaScript還支持delete操作符,可以刪除對象裏的屬性:

var myObj = {name: 'John', age: 21};
delete myObj.age;
console.log(myObj); // 輸出對象{name: "John"} 

6.真值和假值
在這裏插入圖片描述
7.相等操作符(==和===)

使用==時,不同類型的值也可以被看作相等
在這裏插入圖片描述

  • 如果x和y是相同類型,JavaScript會比較它們的值或對象值。其他沒有列在這個表格中的情況都會返回false。
  • toNumber和toPrimitive方法是內部的,並根據以下表格對其進行估值。
console.log(undefined==null);//true
console.log(null==0);//false

在這裏插入圖片描述
===操作符:簡單多了。
如果比較的兩個值類型不同,比較的結果就是false
在這裏插入圖片描述

	console.log('packt' === true); //false
    console.log('packt' === 'packt'); //true
    var person1 = {name:'John'};
    var person2 = {name:'John'};
    console.log(person1 === person2); //false,不同的對象

### 二.控制結構

1.條件語句

if...else條件語句

 	var num = 0;
    if (num === 1) {
        console.log("num is equal to 1");
    } else {
        console.log("num is not equal to 1, the value of num is " +num);
        //num is not equal to 1, the value of num is 0
    }
	條件判斷中使用三元運算
	var num=1;
    if((num === 1)?num--:num++){
        console.log(num);//0
    }
多腳本
var month = 5;
if (month === 1) {
 console.log("January");
} else if (month === 2){
 console.log("February");
} else if (month === 3){
 console.log("March");
} else {
 console.log("Month is not January, February or March");
} 

switch(要和不同的值進行比較的時候使用更好)

var month = 5;
switch(month) {
 case 1:
 console.log("January");
 break; 
 case 2:
 console.log("February");
 break;
 case 3:
 console.log("March");
 break;
 default:
 console.log("Month is not January, February or March");
} 
對於switch語句來說,case和break關鍵字的用法很重要。
default關鍵字,在表達式不匹配前面任何一種情形的時候,就執行default中的代碼(如果有對應的,就不會執行)
  1. 循環(在處理數組元素時會經常用到循環)
var i = 0;
while(i<10)
{
 console.log(i);
 i++;
} 

在這裏插入圖片描述

  1. do…while循環和while循環很相似。區別是在while循環裏,先進行條件判斷再執行循環體中的代碼,而在do…while循環裏,是先執行循環體中的代碼再判斷循環條件。

do…while循環至少會讓循環體中的代碼執行一次

輸出0-9同上的結果
var i = 0;
do { 
console.log(i);
 i++;
} while (i<10) 

三.函數

  1. 寫法:
第一種:沒有用到參數或return語句
	function sayHello() {
        console.log('Hello!alice88');//Hello!alice88
    }
    //要執行這個函數,只需要這樣調用一下:
    sayHello();
第二種:傳遞參數給函數。參數是會被函數使用的變量
function output(text) {
       console.log(text);
}
// 我們可以通過以下代碼使用該函數:
output('Hello!alice88');//Hello!alice88
第三種:傳遞任意數量的參數
求和
	function sum(num1, num2) {
        return num1 + num2;
    }
    // 這個函數計算了給定兩個數字之和,並返回結果。我們可以這樣使用:
    var result = sum(1,2);
    output(result);//3

四.面向對象編程

  1. JavaScript裏的對象就是普通名值對的集合。創建一個普通對象有兩種方式。
    第一種方式是:var obj = new Object();
    第二種方式是:var obj = {};
    也可以這樣創建一個完整的對象:
obj = {
 name: {
 first: 'Gandalf',
 last: 'the Grey'
 },
 address: 'Middle Earth'
}; 
  1. 在面向對象編程(OOP)中,對象是類的實例。一個類定義了對象的特徵。我們會創建很多類來表示算法和數據結構。
例如 聲明瞭一個類來表示書:
function Book(title, pages, isbn){
 this.title = title;
 this.pages = pages;
 this.isbn = isbn;
} 

用下面的代碼實例化這個類:
var book = new Book('title', 'pag', 'isbn');

然後,我們可以訪問和修改對象的屬性:
console.log(book.title); //輸出書名
book.title = 'new title'; //修改書名
console.log(book.title); //輸出新的書名

類可以包含函數。可以聲明和使用函數,如下所示:
Book.prototype.printTitle = function(){
 console.log(this.title);
};
book.printTitle(); 

也可以直接在類的定義裏聲明函數:
function Book(title, pages, isbn){
 this.title = title;
 this.pages = pages;
 this.isbn = isbn;
 this.printIsbn = function(){
 console.log(this.isbn);
 }
}
book.printIsbn();

五.調試工具

Firefox和Chrome都支持調試。這裏有一個瞭解谷歌開發者工具的好教程,地址是
推薦:谷歌開發者工具教程

這裏推薦其他幾個工具,可以提升編寫JavaScript的效率。

 Aptana:這是一個開源的免費IDE,支持JavaScript、CSS3和HTML5以及其他語言
(http://www.aptana.com)。
 WebStorm:這是一個很強大的IDE,支持最新的Web技術和框架。它不是免費的,但你
可以下載一個30天試用版本體驗一下(http://www.jetbrain.com/webstorm)。
 Sublime Text:這是一個輕量級的文本編輯器,可以自定義插件。可以買它的許可證來支
持這個工具的開發,也可以免費使用(試用版不過期),http://www.sublimetext.com/。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章