布蘭登 • 艾奇(Brendan Eich,1961年~),1995年在網景公司,發明的JavaScript。javascript
一開始JavaScript叫作LiveScript,可是因爲當時Java這個語言特別火,因此爲了傍大牌,就更名爲JavaScript。如同「北大」和「北大青鳥」的關係。「北大青鳥」就是傍「北大」大牌。html
同時期還有其餘的網頁語言,好比VBScript、JScript等等,可是後來都被JavaScript戰勝了,因此如今的瀏覽器中,只運行一種腳本語言就是JavaScript。java
ECMAScript是一種由ECMA國際(前身爲歐洲計算機制造商協會,英文名稱是European Computer Manufacturers Association)制定的標準。python
JavaScript是由公司開發而成的,問題是不便於其餘的公司拓展和使用。因此歐洲的這個ECMA的組織,牽頭制定JavaScript的標準,取名爲ECMAScript。程序員
簡單來講,ECMAScript不是一門語言,而是一個標準。符合這個標準的比較常見的有:JavaScript、Action Script(Flash中用的語言)。就是說,你JavaScript學完了,Flash中的程序也就垂手可得了。es6
ECMAScript在2015年6月,發佈了ECMAScript 6版本,語言的能力更強(也包含了不少新特性)。可是,瀏覽器的廠商不能那麼快去追上這個標準。數據庫
JavaScript對初學者比較友好。編程
JavaScript是有界面效果的(好比C語言只有白底黑字)。數組
JavaScript是弱變量類型的語言,變量只須要用var來聲明。而Java中變量的聲明,要根據變量的類型來定義。瀏覽器
好比Java中須要定義以下變量:
int a; float a; String a; ...
而JavaScript中,只用定義一個變量:
var a;
JavaScript是前臺語言,而不是後臺語言。
JavaScript運行在用戶的終端網頁上,而不是服務器上,因此咱們稱爲「前臺語言」。JavaScript就是一個簡單的製做頁面效果的語言,就是服務於頁面的交互效果、美化、絢麗、不能操做數據庫。
後臺語言是運行在服務器上的,好比python、PHP等等,這些語言都可以操做數據庫,都可以對數據庫進行「增刪改查」操做。Node.js除外。
JavaScript基礎分爲三個部分:
ECMAScript:JavaScript的語法標準。包括變量、表達式、運算符、函數、if語句、for語句等。
DOM:操做網頁上的元素的API。好比讓盒子移動、變色、輪播圖等。
BOM:操做瀏覽器部分功能的API。好比讓瀏覽器自動滾動。
PS:JS機械重複性的勞動幾乎爲0,基本都是創造性的勞動。而不像HTML、CSS中margin、padding都是機械重複勞動。
簡單易用:可使用任何文本編輯工具編寫,只須要瀏覽器就能夠執行程序。
解釋執行(解釋語言):事先不編譯、逐行執行、無需進行嚴格的變量聲明。
基於對象:內置大量現成對象,編寫少許程序能夠完成目標
在頁面中,咱們能夠在body標籤中放入<script type="text/javascript"></script>標籤對兒。
<script type="text/javascript"> </script>
學習程序,是有規律可循的,就是程序是有相同的部分,這些部分就是一種規定,不能更改,咱們稱之爲:語法。
備註:每一條語句末尾要加上分號,雖然分號不是必須加的,可是爲了程序從此要壓縮,若是不加分號,壓縮以後將不能運行。
全部的符號,都是英語的。好比括號、引號、分號。
JavaScript的註釋:
單行註釋:
// 單行註釋
多行註釋:
/* 我是多行註釋 我是多行註釋 我是多行註釋 */
備註:pycharm中,單行註釋的快捷鍵是Ctrl+/,多行註釋的快捷鍵是Ctrl+Shift+/。
語法:alert("");
<script type="text/javascript"> alert("小姐姐,你好啊!") </script>
alert(英文翻譯爲「警報」)的用途:彈出「警告框」。
console.log("") 表示在控制檯中輸出。console表示「控制檯」,log表示「輸出」。
控制檯在Chrome瀏覽器的F12中。控制檯是工程師、程序員調試程序的地方。程序員常用這條語句輸出一些東西,來測試程序是否正確。
prompt() 就是專門用來彈出可以讓用戶輸入的對話框。
代碼以下:
<script type="text/javascript"> var a = prompt("今日天氣如何?"); console.log(a); </script>
上方代碼中,用戶輸入的內容,將被傳遞到變量 a 裏面。
效果以下:
f12打開控制檯查看結果。
prompt()語句中,用戶無論輸入什麼內容,都是字符串。
alert和prompt的區別:
alert("從前有座山"); //直接使用,不須要變量 var a = prompt("請輸入一個數字"); // 必須用一個變量,來接收用戶輸入的值
「直接量」即常量,也稱爲「字面量」。看見什麼,它就是什麼。
簡單的直接量有2種:數字、字符串。
(1)、數值的直接量的表達很是簡單,寫上去就好了,不須要任何的符號。例如:
alert(886); //886是數字,因此不須要加引號。
(2)、字符串也很簡單,但必定要加上引號。能夠是單詞、句子等。例如:
alert("Hello"); alert("Hello world");
var是英語「variant」變量的縮寫。後面要加一個空格,空格後面的東西就是「變量名」,
定義變量:var就是一個關鍵字,用來定義變量。所謂關鍵字,就是有特殊功能的小詞語。關鍵字後面必定要有空格隔開。
變量的賦值:等號表示賦值,將等號右邊的值,賦給左邊的變量。
變量名:咱們能夠給變量任意的取名字。
PS:在JavaScript中,永遠都是用var來定義變量,這和C、Java等語言不一樣(有興趣的同窗能夠看一下es6)
變量要先定義,才能使用。好比,咱們不設置變量,直接輸出:
<script type="text/javascript"> console.log(a); </script>
控制檯將會報錯:
正確寫法:
var a; // 定義 a = 100; //賦值 console.log(a); //輸出100
有經驗的程序員,會把定義和賦值寫在一塊兒:
var a = 100; //定義,而且賦值100 console.log(a); //輸出100
變量名有命名規範:只能由英語字母、數字、下劃線、美圓符號$構成,且不能以數字開頭,而且不能是JavaScript保留字。
下列的單詞,叫作保留字,就是說不容許當作變量名(不用記):
abstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto implements、import、int、interface、long、native、package、private、protected、public、short、static、super、
synchronized、throws、transient、volatile
大寫字母是可使用的,而且大小寫敏感。也就是說A和a是兩個變量。
var A = 250; //變量1 var a = 888; //變量2
數據類型包括:基本數據類型和引用數據類型
基本數據類型指的是簡單的數據段,引用數據類型指的是有多個值構成的對象。
當咱們把變量賦值給一個變量時,解析器首先要確認的就是這個值是基本類型值仍是引用類型值
在講數據類型以前,咱們要學習一個函數 typeof 表示「獲取變量的類型」,語法爲:
typeof 變量名稱
3.1.1. number數值類型
var a = 123; //typeof 檢查當前變量是什麼數據類型 console.log(typeof a)
在JavaScript中,只要是數,就是數值型(number)的。不管整浮、浮點數(即小數)、不管大小、不管正負,都是number類型的。
3.1.2. string字符串類型
var a = "abcde"; var b = "路飛"; var c = "123123"; var d = "哈哈哈哈哈"; var e = ""; //空字符串 console.log(typeof a); console.log(typeof b); console.log(typeof c); console.log(typeof d); console.log(typeof e);
3.1.3. boolean布爾類型
var b1 = false; console.log(typeof b1)
3.1.4. null空對象類型
var c1 = null;//空對象 object console.log(c1)
3.1.5. undefined未定義類型
var d1; //表示變量未定義 console.log(typeof d1)
後面課程會講解。
js中的運算符跟python中的運算符有點相似,但也有不一樣。所謂運算,在數學上,是一種行爲,經過已知量的組合,得到新的量。
以var x = 12,y=5來演示示例:
var a = 5,b=2
var x = 5;
字符串拼接+字符串運算 特殊狀況。
var firstName = '小'; var lastName = '姐姐'; var name = '伊拉克'; var am = '美軍'; // 字符串拼接 var tempStr = "2003年3月20日," + name + "戰爭爆發,以美軍爲主的聯合部隊僅用20多天就擊潰了薩達姆的軍隊。這是繼十多年前的海灣戰爭後," + am + "又一次取得的大規模壓倒性軍事勝利。" console.log(tempStr); var fullName = firstName + " " + lastName; console.log(fullName);
// 不能對字符串進行+運算 只能拼接 var a1 = '1'; var a2 = '2'; console.log(a1+a2) //12字符串類型
var b1 = 'one'; var b2 = 'two'; // NaN ==== not a number 是number類型 console.log(b1*b2) // NaN console.log(typeof(b1*b2)) // number
number -----> string
var n1 = 123; var n2 = '456'; var n3 = n1+n2; // 隱式轉換 console.log(typeof n3);
var n1 = 123; // 強制類型轉換String(),toString() var str1 = String(n1); console.log(typeof str1); var num = 234; console.log(num.toString())
string -----> number
var strNum = "123.45dfsdfsd"; var num = Number(strNum); console.log(num); // NaN console.log(typeof num); // number // parseInt()能夠解析一個字符串 而且返回一個整數 console.log(parseInt(strNum); // 123 console.log(typeof(parseInt(strNum))); // number // parseFloat()能夠解析一個字符串 而且返回一個浮點數 console.log(parseFloat(strNum); // 123.45 console.log(typeof(parseFloat(strNum))); // number
* -----> boolean
var num1 = 123; var num2 = 0; var num3 = -123; var a1 = NaN; var a2; var a3 = null; // 數字非零即爲真。 console.log(Boolean(num1); // true console.log(Boolean(num2); // false console.log(Boolean(num3); //true console.log(Boolean(a1); // false console.log(Boolean(a2); // false console.log(Boolean(a3); // false
var age = 18; if (age >= 18){ console.log("恭喜你,能夠去會所了!"); } console.log(111);
var age = 18; if (age >= 18){ console.log("恭喜你,能夠去會所了!"); }else{ console.log("好好上學吧!"); }
var age = 18; if (age >= 18){ console.log("恭喜你,能夠去會所了!"); }else if(age<6){ console.log("好好玩耍吧!"); }else{ console.log("好好上學吧!"); }
語法:
if (true) { //知足條件執行 }else if(true){ //知足條件執行 }else if(true){ //知足條件執行 }else{ //知足條件執行 }
與:&& 或:|| 非:!
var sex = "女"; var age = 18; var hobby = "吹管樂"; var flag = false; // 是否婚配 if (age == 18 && sex == "女") { console.log("妙齡少女"); } if (age == 18 || hobby == "吹管樂") { console.log("湊合吧"); } if (!flag){ console.log("這是機會。"); }
var age = 18; switch (age) { //case表示一個條件 知足這個條件就會走進來 遇到break跳出。若是某個條件中不寫 break,那麼直到該程序遇到下一個break中止 case 18: console.log("能夠去會所了。"); break; case 60: console.log("您老仍是回家吧!"); break; default: console.log("好好學習。") }
循環三步走:
1.初始化循環變量
2.判斷循環條件
3.更新循環變量
var i = 1; //初始化循環變量 while(i<=9){ //判斷循環條件 console.log(i); i++; //更新循環條件 等同於i=i+1 }
小練習:將1-100全部是2的倍數在控制檯中打印。使用while循環實現。
//無論有沒有知足while中的條件do裏面的代碼都會走一次 var i = 3;//初始化循環變量 do{ console.log(i) i++;//更新循環條件 }while (i<10) //判斷循環條件
for(var i = 1;i<=10;i++){ console.log(i) }
課堂練習:
// 打印1--100的偶數。 for(var i = 1;i<=100;i++){ if(i%2==0){ //是偶數 console.log(i) } }
雙重for循環
for (var i = 1; i <= 5; i++) { // 行數 for (var j = 0; j < 6; j++) {// 每行的列數 document.write('*') } document.write('<br>') }
效果:
小做業:
1.在瀏覽器中輸出直角三角形
* ** *** **** *****
for (var i = 1; i <= 5; i++) { // 行數 for (var j = 0; j < i; j++) {// 每行的列數 document.write('*') } document.write('<br>') }
2.在瀏覽器中輸出等腰三角形
* *** ***** ******* *********
for (var i = 1; i <= 5; i++) { // 行數 //控制咱們的空格數 for (var s = i; s < 5; s++) { document.write(' ') } for (var j = 1; j <= 2 * i - 1; j++) { document.write('*') } document.write('<br>') }
所謂內置對象就是ECMAScript提供出來的一些對象,咱們知道對象都是有相應的屬性和方法
var arr = ["alex", "egon", "yuan"];
var arr = new Array();
var arr = []; //經過下標進行一一賦值 arr[0] = 123; arr[1] = '哈哈哈'; arr[2] = '嘿嘿嘿'
var north = ['北京','山東','天津']; var south = ['東莞','深圳','上海']; var newCity = north.concat(south); console.log(newCity)
var score = [98,78,76,100,0]; var str = score.join('|'); console.log(str);//98|78|76|100|0
var score = [98,78,76,100,0]; //toString() 直接轉換爲字符串 每一個元素之間使用逗號隔開 var str = score.toString(); console.log(str);//98,78,76,100,0
var arr = ['張三','李四','王五','趙六']; var newArr = arr.slice(1,3); console.log(newArr);//["李四", "王五"]
var arr = ['張三', '李四', '王五', '趙六']; var item = arr.pop(); console.log(arr);//["張三", "李四","王五"] console.log(item);//趙六
var arr = ['張三', '李四', '王五', '趙六']; var newLength = arr.push('鐵蛋');//能夠添加多個,以逗號隔開 console.log(newLength);//5 console.log(arr); //["張三", "李四", "王五", "趙六", "鐵蛋"]
var arr = ['張三', '李四', '王五', '趙六']; //反轉數組 arr.reverse(); console.log(arr);
var names = ["alex", "yuan", "wusir", "egon"]; names.sort(); console.log(names); // ["alex", "egon", "wusir", "yuan"]
布爾類型值 = Array.isArray(被檢測的值);
var names = ["alex", "yuan", "wusir", "egon"]; var a = names.shift(); console.log(a); // "alex" console.log(names); // ["yuan", "wusir", "egon"]
var names = ["alex", "yuan", "wusir", "egon"]; var newLength = names.unshift('鐵蛋');//能夠添加多個,以逗號隔開 console.log(newLength);//5 console.log(names); //["鐵蛋", "alex", "yuan", "wusir", "egon"]
字符串方法
var str = 'alex'; var charset = str.charAt(2); console.log(charset);//e
var str1 = 'al'; var str2 = 'ex'; console.log(str1.concat(str2,str2));//alexex
var a = '1234567755'; var newStr = a.replace("4567","****"); console.log(newStr);//123****755
var str = 'alex'; console.log(str.indexOf('e'));//2 console.log(str.indexOf('p'));//-1
var str = 'egon'; console.log(str.slice(1,2)); //g
var str = '個人天呢,a是嘛,你在說什麼呢?a哈哈哈'; console.log(str.split('a')); // ["個人天呢,", "是嘛,你在說什麼呢?", "哈哈哈"] console.log(str.split('a', 2)); // ["個人天呢,", "是嘛,你在說什麼呢?"]
var str = '個人天呢,a是嘛,你在說什麼呢?a哈哈哈'; console.log(str.substr(0,4));//個人天呢
var str = 'XIAOMI'; console.log(str.toLowerCase()); //xiaomi
var str = 'xiaomi'; console.log(str.toUpperCase()); // XIAOMI
var name = " alex "; console.log(name); //" alex " console.log(name.trim()); // "alex"
特別:
// 四捨五入 var num = 132.62522; var newNum1 = num.toFixed(); console.log(newNum1); //133 var newNum2 = num.toFixed(2); console.log(newNum2); //132.63
建立日期對象只有構造函數一種方式,使用new關鍵字
//建立了一個date對象 var myDate = new Date();
//建立日期對象 var myDate=new Date(); console.log(myDate.getDate()); console.log(myDate.toLocaleString());
經常使用內置對象
var x = 1.234; //天花板函數 表示大於等於 x,而且與它最接近的整數是2 var a = Math.ceil(x); console.log(a);//2
var x = 1.234; // 小於等於 x,而且與它最接近的整數 1 var b = Math.floor(x); console.log(b);//1
//求 兩個數的最大值 最小值 console.log(Math.max(2,5));//5 console.log(Math.min(2,5));//2
var ran = Math.random(); console.log(ran);[0,1]之間的隨機小數
若是讓你取100-200之間的隨機數,怎麼作?
背過公式:min - max之間的隨機數: min+Math.random()*(max-min)
以上是我們介紹的JS經常使用對象的方法,若是想參考更多內容,請參考連接:http://www.runoob.com/jsref/jsref-tutorial.html
函數:就是將一些語句進行封裝,而後經過調用的形式,執行這些語句。
函數的做用:
將大量重複的語句寫在函數裏,之後須要這些語句的時候,能夠直接調用函數,避免重複勞動。
簡化編程,讓編程模塊化。
console.log("hello world"); sayHello(); //調用函數 //定義函數: function sayHello(){ console.log("hello"); console.log("hello world"); }
函數定義的語法:
function 函數名字(){ //函數體內容 }
解釋以下:
function:是一個關鍵字。中文是「函數」、「功能」。
函數名字:命名規定和變量的命名規定同樣。只能是字母、數字、下劃線、美圓符號,不能以數字開頭。
參數:後面有一對小括號,裏面是放參數用的。
大括號裏面,是這個函數的語句。
函數調用的語法:
函數名字();
函數的參數包括形參和實參
注意:實際參數和形式參數的個數,要相同。
例子:
sum(3, 4); sum("3", 4); sum("Hello", "World"); //函數:求和 function sum(a, b) { console.log(a, b); console.log(arguments); console.log(a + b); }
例子:
console.log(sum(3, 4)); //函數:求和 function sum(a, b) { return a + b; }
arguments表明的是實參。有個講究的地方是:arguments只在函數中使用。
(1)返回函數實參的個數:arguments.length
例子:
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b,c) { console.log(arguments); console.log(fn.length); //獲取形參的個數 console.log(arguments.length); //獲取實參的個數 console.log("----------------"); }
結果:
(2)之因此說arguments是僞數組,是由於:arguments能夠修改元素,但不能改變數組的長短。舉例:
fn(2,4); fn(2,4,6); fn(2,4,6,8); function fn(a,b) { arguments[0] = 99; //將實參的第一個數改成99 arguments.push(8); //此方法不經過,由於沒法增長元素,會報錯 }
清空數組的幾種方式:
var array = [1,2,3,4,5,6]; array.splice(0); //方式1:刪除數組中全部項目 array.length = 0; //方式2:length屬性能夠賦值,在其它語言中length是隻讀 array = []; //方式3:推薦