JavaScript 筆記

是什么:What

是一種腳本語言,用于執(zhí)行網(wǎng)頁上的動(dòng)作
(內(nèi)容由 HTML 語言書寫,格式由 CSS 規(guī)范,動(dòng)作由 JS 來執(zhí)行)

JS 是一種解釋性的語言,與 Java 這種強(qiáng)類型的語言無關(guān)

特點(diǎn)是什么

  1. 解釋性語言

適用/不適用場合

抵卫。狮荔。。

如何編寫

Hello World

<body></body> 中放入如下代碼

<!--first JS-->
<script>
    document.write("Hello World");
</script>

字符串輸出

document.write("Here is the string for output.") 中的字符串是 HTML 流介粘,即可包括 <br/> 等 HTML 標(biāo)簽

注意:

  • document.write() 中殖氏,換行應(yīng)該通過在字符串中用 <br/> 輸出;輸出轉(zhuǎn)義字符 \n 在這里無法起到換行的效果姻采;在
  • alert() 中雅采,換行字符則使用 \n

變量定義

  • JS 中使用 var VariableName = Value 來把值 Value 賦予變量 VariableName
  • 值有類型,變量則不需要事先規(guī)定類型
  • JS 中慨亲,變量作用域只有 2 個(gè)空間:函數(shù)內(nèi)部空間婚瓜,全局空間
<!--variable setting-->
<script>
    var HW;
    HW = "Hello World";
    document.write(HW);
    //same effect as 'first JS'
</script>

判斷

if-else statement

類似 C/C++

    if (expr1){
      //do something
    }
    else if (expr2){
      //do something
    }
    else{
      //do something
    }

示例如下

<script>
    var age = 20;
    var ADULT = 18;
    var teenage = 12;
    document.write("Your age is " + age + ".");
    if (age >= ADULT){
      alert("Adult.");
    }
    else if (age >= teenage){
      alert("Teenage.");
    }
    else{
      alert("Children.")
    }
    //page message: "Your age is 20."
    //alert message: "Adult."
</script>

關(guān)系運(yùn)算符(三元運(yùn)算符)

<expr>?<v1>:<v2>
//the same effect as:
//if (<expr>)
//{v1}
//else
//{v2}

例如,這這段代碼

max = (a > b)?a:b;

與這段代碼效果一致

if (a > b)
{
  max = a;
}
else
{
  max = b;
}

case-switch statment

類似 C/C++

switch(VariableName){
    case value1:
        //code block 1
        break; //otherwise the code below will run.
    case value2:
        //code block 2
        break; //otherwise the code below will run.
    default:
        //code block 3
}

邏輯運(yùn)算符

  • and: &&
  • or: ||
  • not: !

循環(huán)

while loop

類似 C/C++

while(expr1){
  //while expr1 == true, do something
}

do-while loop

類似 C/C++

do{
  //do something
  //if expr1 == true, loop; else, break
}while(expr1)

for loop

類似 C/C++

for (init; condition; step){
    //do something
}

例如

for (i = 0; i < 5; i++){
    document.write(i);
}
//print 01234

break

控制效果與 C/C++ 一致

contuine

控制效果與 C/C++ 一致

函數(shù)

定義方式

function fun_para_0(){
    document.write('function without any parameters.');
}
function fun_para_1(a){
    return (a + 10);
}
function fun_para_2(n1, n2){
    document.write(n1 + n2);
}


fun_para_0();//function without any parameters.
document.write(fun_para_1(15));//25
fun_para_2(1, 2);//3

函數(shù)變量

var f = Function("x", "y", "return x*y");
//seems same effect as
//
//function f(x, y){return x*y;}
//
//may be useful in advanced applications one day, use function as variable

重復(fù)定義與調(diào)用

后面的函數(shù)定義將覆蓋之前的函數(shù)定義:意思是無論你定義+調(diào)用多少次函數(shù) myf1刑棵,總之所有對(duì) myf1 的調(diào)用都將以最后一次對(duì)該函數(shù)的定義為準(zhǔn)巴刻。例如如下的 HTML 代碼配合如下的 JS 代碼,輸出的效果如圖所示:

HTML 代碼:

<html>
  <head>
    <title>js03</title>
  </head>

  <body>
    <p> hello js03 </p>

    <script src="run.js"></script>

    <script>
    function my_func(){
    document.write(1);
    }

    my_func()

    document.write("<br>");

    function my_func(){
      document.write(2);
      }

      my_func()
      </script>
  </body>
</html>

JS 代碼:

function myf1()
{
    var i = 7;
    while (i >= 0)
    {
        document.write("This is number " + i + ".<br/>");
        i--;
    }

}

myf1();

document.write("------when overridden------<br/>");

function myf1()
{
    document.write("Hello world! This is js03.");
}

myf1();

document.write("<br/><br/>THE END.");

效果圖:

JS 中重復(fù)定義函數(shù)
JS 中重復(fù)定義函數(shù)

數(shù)組

定義方式

var a = new Array();// way 1
var b = new Array(size);// way 2
var c = new Array(digit_1, digit_2, ..., digit_n);// way 3; if only one parameter, the sentence will be treated as way 2
var d = [digit_1, digit_2, ..., digit_n]; // way 4

數(shù)組長度

var ar = new Array(100);
document.write(ar.length); // print 100

尾部添加元素

var ar = new Array(size);
ar[ar.length] = Elem0;
``

> 以字符串形式輸出數(shù)組的 4 種方式

```JS
var ar = ['W', 'H', 'O'];
alert(ar); //way 0
alert(ar.toString());//way 1. same effect as way 0
alert(ar.valueOf());//way 2. same effect as way 0
alert(ar.join(char));//use char to connect each element of the array

堆棧操作

var ar = new Array();
var count = ar.push(item0, item1, item2); //item0 is on the bottom; count == 3
var topItem = ar.pop(); //topItem == item2

隊(duì)列操作

var ar = new Array();
var count = ar.push(item0, item1, item2); //item0 is on the bottom; count == 3
var topItem = ar.shift(); //topItem == item0

排序

按字符串順序蛉签,從小到大排序

var values = ['hello', 'gello', 'hellp'];
values.sort();
alert(values); // gello, hello ,hellp; if values == [0,1, 5, 10, 15], here is: 0, 1, 10, 15, 5

按輸入順序反向輸出

var values = ['hello', 'gello', 'hellp'];
values.reverse();
alert(values); // hellp, gello ,hello

連接數(shù)組

var values = ['k','i','s','s'];
var obj = ['y', 'o', 'u'];
var hello = values.concat(obj);
alert(hello);//k,i,s,s,y,o,u

數(shù)組切片

左閉右開

var values = ['k','i','s','s'];
var hello = values.slice(1, 4);
alert(hello);//i, s, s

splice(開始位置, 刪除個(gè)數(shù), 插入元素0, 插入元素1, ...)

刪除

var values = ['k','i','s','s'];
values.splice(0, 2);
alert(values);//s, s

插入

var values = ['k','i','s','s'];
values.splice(values.length, 'you');
alert(values);//k,i,s,s,you

替換

var values = ['k','i','s','s'];
values.splice(1, 2, 'a', 'i');
alert(values);//k,a,i,s

對(duì)象

定義對(duì)象

var obj1 = new Object();//way1
var obj2 = {x:1, y:2, z:3}//way2

刪除對(duì)象屬性

delete obj2.x;
document.write(obj2.x)//undefined

或者

obj2.x = null;
document.write(obj2.x)//null

遍歷對(duì)象屬性

obj = {name:"Potter", age: 14, gender: "male"};
for (var x in obj){
    document(obj[x] + "<br>")胡陪;//random access in object
}
//print:
//Potter
//14
//male

構(gòu)造函數(shù)

  1. 不直接制造對(duì)象
  2. 用 this 來指代構(gòu)造出的對(duì)象,用于定義成員
  3. 沒有 return
function ClassName(para_1, para_2, ...){
    this.attrib_1 = para_1;
    this.attrib_2 = para_2;
    //...
    this.attrib_n = function(){
        //use this.attrib_1, ..., this.attrib_i, otherwise this.atrrib_n returns a value which doesn't change when this.attrib_1, ..., this.attrib_i change.
        //For example, it will keep the value counted using para_1, ..., para_i.
    };
    //etc.
}

var obj = new ClassName(p1, p2, ...);

注意構(gòu)造函數(shù)內(nèi)部的方法應(yīng)使用函數(shù)屬性碍舍,而非參數(shù)柠座。否則內(nèi)部方法導(dǎo)出的值不隨著屬性的改變而改變∑穑考慮如下兩段代碼的輸出差異:

如下代碼輸出 50, 100:

function Rect(w, h){
    this.width = w;
    this.height = h;
    this.area = function(){
        return this.width * this.height;
    };
}

var r0 = new Rect(5, 10);
alert(r0.area());
r0.width = 10;
alert(r0.area());

如下代碼輸出 50, 50:

function Rect(w, h){
    this.width = w;
    this.height = h;
    this.area = function(){
        return w * h;
    };
}

var r0 = new Rect(5, 10);
alert(r0.area());
r0.width = 10;
alert(r0.area());

原型對(duì)象

使用 prototype 可為對(duì)象原型(而非實(shí)例 instance)增加屬性妈经,例如

function Person(){} //構(gòu)造了一個(gè)空對(duì)象
Person.prototype.name = "Default Name" //此后,所有 Person 對(duì)象均有 1 個(gè)新屬性捧书,屬性名 name吹泡,初始值 "Default Name"
Person.prototype.gender = "Female" //此后,所有 Person 對(duì)象均有 1 個(gè)新屬性经瓷,屬性名 gender荞胡,初始值 "Female"
var person1 = new Person();//person1.name == "Default Name", person1.gender = "Female"
var person2 = new Person();//person2.name == "Default Name", person2.gender = "Female"
person1.name = "Harry Potter"; // person1.name == "Harry Potter"; 不影響 person2
Person.prototype.gender = "Male";//此后,person1.gender == "Male"了嚎,person2.gender == "Male"
Person.prototype.age = 14; //此后,person1 增加了 1 個(gè)屬性 age廊营,值為 14歪泳;person2 也有同樣的效果

注意一個(gè)問題:使用原型后,在實(shí)例為原型設(shè)定的屬性賦值之前露筒,所有實(shí)例的屬性是指向同一原型的呐伞。例如

function Person(){}
Person.prototype = {
    name = "Default Name";
    fruit = ["apple", "pear", "peach"];
}

var p1 = new Person();//p1.fruit == ["apple", "pear", "peach"]; p1.fruit 指向 Person.prototype.fruit
var p2 = new Person();//p2.fruit == ["apple", "pear", "peach"]; p2.fruit 指向 Person.prototype.fruit
p1.fruit.push("banana"); //此后, p1.fruit 與 p2.fruit 內(nèi)容一致,均為 ["apple", "pear", "peach", "banana"];

結(jié)合原型與構(gòu)造函數(shù)慎式,我們可以既有共享部分(使用 prototype)伶氢,又有單獨(dú)部分(使用關(guān)鍵字 this):

function Person(){
    this.name = "Default Name";
    this.fruit = ["apple", "pear", "peach"];
}

Person.prototype = {
    gender = "Male";
    age = 14;
    sayName = function(){
        alert(this.name);
    }
}

所有對(duì)象都是全局對(duì)象 window 的成員

  • 瀏覽器的全局對(duì)象是 window趟径,所有的「全局變量」都是 window 的成員
  • document 是全局對(duì)象 window 的成員,表示瀏覽器窗口的 HTML 頁面癣防,頁面上的元素都是 document 的成員

JS 加載方式

  • <script></script> 中嵌入代碼
  • <script> 標(biāo)簽的 src 屬性中指明 JS 對(duì)應(yīng) URL
  • 某個(gè) HTML 標(biāo)簽的事件處理器中指明
    • 一些特殊的事件處理器如
      • 普通標(biāo)簽:onMouseOver, onMouseOut, onMouseClick, onMouseDoubleClick
      • body:onLoad, onUnload
      • 對(duì)話框:alert(), prompt(), confirm()
        • alert():單一提示對(duì)話框
        • prompt():對(duì)話框提示輸入 1 個(gè)值
          • 例如:var name = prompt("Input your name: ");
        • confirm():對(duì)話框提示「是/否」蜗巧,返回 1 或 0
          • 例如:if (confirm("Are you kidding?")) { alert("Ouch!");} else {alert("Thank you.");}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蕾盯,隨后出現(xiàn)的幾起案子幕屹,更是在濱河造成了極大的恐慌,老刑警劉巖级遭,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件望拖,死亡現(xiàn)場離奇詭異,居然都是意外死亡挫鸽,警方通過查閱死者的電腦和手機(jī)说敏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丢郊,“玉大人盔沫,你說我怎么就攤上這事÷煜Γ” “怎么了迅诬?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長婿牍。 經(jīng)常有香客問我侈贷,道長,這世上最難降的妖魔是什么等脂? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任俏蛮,我火速辦了婚禮,結(jié)果婚禮上上遥,老公的妹妹穿的比我還像新娘搏屑。我一直安慰自己,他們只是感情好粉楚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布辣恋。 她就那樣靜靜地躺著,像睡著了一般模软。 火紅的嫁衣襯著肌膚如雪伟骨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天燃异,我揣著相機(jī)與錄音携狭,去河邊找鬼。 笑死回俐,一個(gè)胖子當(dāng)著我的面吹牛逛腿,可吹牛的內(nèi)容都是我干的稀并。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼单默,長吁一口氣:“原來是場噩夢啊……” “哼碘举!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雕凹,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤殴俱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后枚抵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體线欲,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年汽摹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了李丰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逼泣,死狀恐怖趴泌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拉庶,我是刑警寧澤嗜憔,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站氏仗,受9級(jí)特大地震影響吉捶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皆尔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一呐舔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慷蠕,春花似錦珊拼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至每辟,卻和暖如春昔头,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背影兽。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莱革,地道東北人峻堰。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓讹开,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捐名。 傳聞我的和親對(duì)象是個(gè)殘疾皇子旦万,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • JavaScript 將字符串轉(zhuǎn)換為數(shù)字 parseInt() ◆只保留數(shù)字的整數(shù)部分,不會(huì)進(jìn)行四舍五入運(yùn)算镶蹋。 ...
    AkaTBS閱讀 984評(píng)論 0 9
  • JS基礎(chǔ)講解 JavaScript組成ECMAScript:解釋器成艘、翻譯DOM:Document Object M...
    FConfidence閱讀 571評(píng)論 0 1
  • 嚴(yán)格模式 曾益 消除js語法的一些不合理、不嚴(yán)謹(jǐn)贺归、不安全問題淆两,減少怪異行為并保證代碼運(yùn)行安全 提高編譯器效率,增加...
    ddai_Q閱讀 882評(píng)論 0 2
  • 標(biāo)簽: 我的筆記 ---學(xué)習(xí)資料:http://javascript.ruanyifeng.com/ 1. 導(dǎo)論 ...
    暗夜的怒吼閱讀 810評(píng)論 0 1
  • 為什么古代的生肖是12種剑勾?那12種色彩能否代表12類人的性格?分享近日看到一本書《性格色彩》赵颅,12種顏色虽另,12種性...
    小文刀閱讀 6,944評(píng)論 0 2