javascript
学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)
一.語法
1.javascirpt中一切(變量,函數(shù)名和操作符)是嚴(yán)格區(qū)分大小寫的。
2.javascript(標(biāo)識符)
所謂標(biāo)識符,就是指變量,函數(shù),屬性的名字,或者函數(shù)的參數(shù)。
命名規(guī)則:第一個字符必須是一個字母、下劃線、美元符號,其它字符可以是字母、下劃線、美元符號或數(shù)字。
不能把關(guān)鍵字,保留字,true,false和null用作標(biāo)識符。
3.ECMAScript標(biāo)識符采用駝峰大小寫格式,也就是第一個字母小寫,剩下的每個單詞的首字母大寫。(但是沒有誰強制要求這個格式)
4.注釋
//單行注釋
/*
*這是多行注釋
*/
5.語句
每條語句最好用一個分號結(jié)尾,但是也可以省略分號。
可以把多條語句組合到一個代碼塊中,及代碼塊以左花括號({)開頭,以右花括號(})結(jié)尾。
if (test)?
alert(test); //有效但容易出錯,最好不要使用
if (test) {
alert(test);//推薦使用
}
6.關(guān)鍵字和保留字
?
?
7.變量
變量是松散類型的,可以用來保存任何類型的數(shù)據(jù)。使用關(guān)鍵字var來聲明變量。
var message; 像這樣未經(jīng)過初始化的變量會保存一個特殊的值undefined
obj=100; 這樣雖然有效,但不推薦,這樣相當(dāng)于聲明了一個全局變量
二. ECMAScript有5種簡單數(shù)據(jù)類型:Undefined,Null,Boolean,Number和String以及1種復(fù)雜數(shù)據(jù)類型Object?
1.typeof操作符:一元操作符,操作數(shù)可以是變量或數(shù)字字面量,用來檢測給定變量的數(shù)據(jù)類型。
可能的返回值:
1). 'undefined' --- 這個值未定義;
2). 'boolean' ? ?--- 這個值是布爾值;
3). 'string' ? ? ? ?--- 這個值是字符串;
4). 'number' ? ? --- 這個值是數(shù)值;
5). 'object' ? ? ? --- 這個值是對象或null;
6). 'function' ? ?--- 這個值是函數(shù)。
2.Undefined類型只有一個值,即特殊的undefined.
var message;
alert(message==undefined); //true
包含undefined值的變量與尚未定聲明的變量還是不一樣。
var message;
//var age;
alert(message); //undefined
alert(age); //產(chǎn)生錯誤
對尚未聲明的變量執(zhí)行typeof,結(jié)果返回undefined,對尚未初始化的變量執(zhí)行typeof,結(jié)果返回undefined
var message;
//var age;
alert(typeof message); //undefined
alert(typeof age); //undefined
最好顯示的初始化變量,這樣的話當(dāng)typeof操作符返回undefined值時,我們就知道被檢測的變量沒有被聲明,而不是尚未初始化,因為沒有聲明的變量用typeof操作符就會直接返回undefined
3.null類型
null類型只有一個值,即特殊的null. null值表示一個空對象指針,typeof操作符檢測null值返回“object”。
null與undefined之間的相等操作符(==)進行比較總是返回true。
4.Boolean類型
只有兩個字面值:true和false,這兩個值與數(shù)字值不一樣,true不一定等于1,false不一定等于0,這兩個字面值區(qū)分大小寫。
要將一個值轉(zhuǎn)換為其對應(yīng)的Boolean值,可以調(diào)用轉(zhuǎn)型函數(shù)Boolean()。
javascript中,任何的數(shù)據(jù)類型調(diào)用轉(zhuǎn)型函數(shù)Boolean(),總會返回一個Boolean值,各種數(shù)據(jù)類型及轉(zhuǎn)換規(guī)則如下:
5.Number類型
包括整數(shù)和浮點數(shù)
1).整數(shù)包括十進制,八進制字面值和十六進制的字面值。
八進制字面值的第一位必須是零,十六進制的字面值的前兩位必須是0x。
在進行算術(shù)計算時,八進制字面值和十六進制的字面值最終會轉(zhuǎn)換成十進制數(shù)值。
2).浮點數(shù)
所謂浮點數(shù)值,該數(shù)值中必須包含一個小數(shù)點,并且小數(shù)點后必須至少有一位數(shù)字。小數(shù)點前面可以沒有整數(shù),但是不推薦這樣使用。
浮點數(shù)可以這樣:var floatNum = .1;但是不推薦這樣使用。
由于保存浮點數(shù)值需要的內(nèi)存空間是整數(shù)值的兩倍,因此不失時機的將浮點數(shù)值轉(zhuǎn)換為整數(shù)值。如果浮點數(shù)小數(shù)點后面沒有任何數(shù)字,那個這個數(shù)值就可以被作為整數(shù)值來保存,同樣,如果浮點數(shù)本身就表示一個整數(shù)(如1.0)那么該值也會被轉(zhuǎn)換為整數(shù)。
對于極大和極小數(shù)值,使用科學(xué)計數(shù)法。浮點數(shù)值最高精度是17位小數(shù)。
? ? ?Number.MAX_VALUE整數(shù)的最大值
Number.MIN_VALUE整數(shù)的最小值
如果計算得到一個超出javascript數(shù)值范圍的值,那么這個數(shù)值自動轉(zhuǎn)換為特殊的Infinity,如果某次返回正的或負的Infinity值,那么該值將無法繼續(xù)參與下一次計算
要想確定一個數(shù)值是不是有窮的,可以使用isFinite(number?)函數(shù),如果 number 是有限數(shù)字(或可轉(zhuǎn)換為有限數(shù)字),那么返回 true。否則,如果 number 是 NaN(非數(shù)字),或者是正、負無窮大的數(shù),則返回 false。
訪問Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY可以得到正和負的Infinity的值,所以其實這兩個屬性分別保存著-Infinity和Infinity
3).? NaN
? ? ? NaN特點:1任何涉及到NaN的操作都會返回NaN,2NaN與任何值都不相等,其中包括NaN本身 。
? ? ? isNaN()這個函數(shù)接受一個參數(shù),該參數(shù)可以是任何類型,而此函數(shù)會幫我們確定這個參數(shù)是否“不是數(shù)值”,不是數(shù)值返回true。
? ? ? isNaN()這個函數(shù)接受一個參數(shù),會嘗試將這個值轉(zhuǎn)換為數(shù)值。任何不能被轉(zhuǎn)換為數(shù)值的值都會導(dǎo)致該函數(shù)返回true。
? ? ? alter(isNaN(NaN));//true
?? ? alter(isNaN(10));//false
?? ? alter(isNaN("10"));///false
?? ? alter(isNaN("red"));//true
?? ? alter(isNaN(true));//true
4).數(shù)值轉(zhuǎn)換
有三個函數(shù)可以將非數(shù)值轉(zhuǎn)換為數(shù)值:Number(),parseInt(),parseFloat()
轉(zhuǎn)型類型Number()可以用于任何數(shù)據(jù)類型,parseInt(),parseFloat()專門用于將字符串轉(zhuǎn)換成數(shù)值。
Number()函數(shù)的轉(zhuǎn)換規(guī)則如下:
(1)如果是Boolean值,true和false將分別被轉(zhuǎn)換為1和0
(2)如果是是數(shù)字值,只是簡單的傳入和返回
(3)如果是null值,返回0
(4)如果是undefined,返回NaN
(5)如果是字符串,遵循下列規(guī)則:
? ? ? ? 如果字符串中只包含數(shù)字,則將其轉(zhuǎn)換為十進制數(shù)值,級“1”會變成1,“123”會變成123,而“011”會變成11(前面的0被忽略了)
? ? ? ? 如果字符串中只包含有效的浮點格式,如“1.1”,則將其轉(zhuǎn)換為對應(yīng)浮點數(shù)值(同樣,也會忽略前導(dǎo)零)
? ? ? ? 如果字符串中只包含有效的十六進制格式,例如“0xf”,則將其轉(zhuǎn)換為相同大小的十進制整數(shù)值
? ? ? ? 如果字符串是空的(不包含任何字符),則將其轉(zhuǎn)換為0
? ? ? ? ?如果字符串中包含除上述格式之外的字符,則將其轉(zhuǎn)換為NaN
(6)如果是對象,則調(diào)用對象的valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值。如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對象的toString()把各種數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值確實有點復(fù)雜。下面是幾個具體例子:
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number("true"); //1
parseInt()
parseInt()函 數(shù)在轉(zhuǎn)換字符串時,它會忽略字符串前面的空格,直至找到第一個非空格字符。
如果第一個字符不是數(shù)字字符或者負號,parseInt()就會返回NaN;也就是說,用parseInt()轉(zhuǎn)換空字符串會返回NaN(Number()對空字符串返回0)。
如果第一個字符是數(shù)字字符,parseInt()會繼續(xù)解析第二個字符,直到解析完所有后續(xù)字符或者遇到了一個非數(shù)字字符。
例如,“123blue”會被轉(zhuǎn)換為 1234,因為“blue”會被完全忽略。類似地,“22.5”會被轉(zhuǎn)換成22,因為小數(shù)點并不是有效的數(shù)字字符。
如果字符串中的第一個字符是數(shù)字字符,parseInt()也能夠識別出各種整數(shù)格式(即十進制、八進制、十六進制)。也就是說,如果字符串以 “0x”開頭且后跟數(shù)字字符,就會將其當(dāng)作一個十六進制整數(shù);如果字符串以“0”開頭且后跟數(shù)字字符,則將其當(dāng)作一個八進制數(shù)或十進制來解析。
為了更好地理解parseInt()函數(shù)的轉(zhuǎn)換規(guī)則,下面給出了一些例子:
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("0xA") //10(十六進制)
var num4 = parseInt("22.5"); //22
var num5 = parseInt("070"); //56或70(八進制)
var num6 = parseInt("70"); //(70)十進制
var num7 = parseInt("0xF") //15(十六進制)
parseInt()解析“070”,導(dǎo)致上述困惑,ECMAScript也為這個函數(shù)提供了第二個參數(shù):轉(zhuǎn)換時使用的基數(shù)(即多少進制)。
指定基數(shù)會影響到轉(zhuǎn)換的輸出結(jié)果。
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
這個例子中的第一個轉(zhuǎn)換成功了,而第二個則失敗了。差別在于第一個轉(zhuǎn)換傳入了基數(shù),明確告訴parseInt()要解析一個十六進制格式的字符串;而第二個轉(zhuǎn)換發(fā)現(xiàn)第一個字符不是數(shù)字字符,因此就自動終止了。
var num1 = parseInt("10", 2); //2
var num2 = parseInt("10", 8);? //8
var num3 = parseInt("10", 10); //10
var num4 = parseInt("10", 16); //16
parseFloat()
parseFloat()也是從第一個字符(位置0)開始解析每個字符,一直解析到字符串末尾,或解析到遇見一個無效的浮點數(shù)字字符為止。也就是說,字符串中的第一個小數(shù)點是有效的,而第二個小數(shù)點是無效的,因此它后面的字符串將被忽略。舉例來 說,“22.34.5”將會被轉(zhuǎn)換為22.34。
除了第一個小數(shù)點有效之外,parseFloat()與parseInt()的第二個區(qū)別在于它始終都會忽略前導(dǎo)零。由于parseFloat()只解析十進制值,因此 它沒有用第二個參數(shù)指定基數(shù)的用法。十六進制格式的字符串始終會被轉(zhuǎn)換為0。最后還要注意一點:如果字符串包含的是一個可解析為整數(shù)的數(shù)(沒有小數(shù)點,或者小數(shù)點后面都是 零),parseFloat()會返回整數(shù)。以下是使用parseFloat()轉(zhuǎn)換數(shù)值的幾個典型示例:
var num1 = parseFloat("1234blue"); //1234
var num1 = parseFloat("0xA"); //0
var num1 = parseFloat("22.5"); //22.5
var num1 = parseFloat("22.34.5"); //22.34
var num1 = parseFloat("0908.5"); //908.5
var num1 = parseFloat("3.125e7"); //31250000
6.String類型
用雙引號表示的字符串和用單引號表示的字符串完全相同,任何字符串長度都可以通過其length屬性取得。
字符串的特點:字符串一旦創(chuàng)建,它們的值就不能改變。要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用一個包含新值的字符串填充該變量。
toString()-轉(zhuǎn)換為字符串
數(shù)值的toString()方法:把一個數(shù)值轉(zhuǎn)換為字符串,返回該數(shù)值的字符串表現(xiàn)形式。可以傳入一個基數(shù),可以以十進制,八進制和十六進制的格式返回數(shù)值的字符串表現(xiàn)形式。
字符串toString()方法:返回字符串的一個副本。
轉(zhuǎn)換為字符串方法toString(),數(shù)值、布爾值、對象和字符串都有些方法,但null和undefined值沒有此方法
在不知道值為null或undefined值時,可以使用轉(zhuǎn)型函數(shù)String(),這個函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串,String()函數(shù)遵循轉(zhuǎn)換規(guī)則:1). 如果值有toString()方法,則調(diào)用該方法(沒有參數(shù))返回相應(yīng)的結(jié)果2). 如果值是null則返回"null"3). 如果值為undefined則返回"undefined"
7.Object類型
ECMAScript中的對象其實就是一組數(shù)據(jù)和功能的集合。對象可以通過new操作符來創(chuàng)建。在ECMAScript中,如果不能構(gòu)造函數(shù)傳遞參數(shù),則可以省略后面的那一對圓括號
如下所示
var obj = new Object();
var obj = new Object;//但一般不推薦這種寫法。
Object的每個實例都具有下列屬性和方法
? constructor保存著用于創(chuàng)建當(dāng)前對象的構(gòu)造函數(shù)
hasOwnProperty(propertyName)用于檢查給定的屬性在當(dāng)前對象實例中(而不是在實例的原型中)是否存在
isPrototypeOf(object)用于檢查傳入的對象是否是另一個對象的原型
propertyIsEnumerable(propertyName)用于檢查給定的屬性是否能夠使用for-in語句來枚覺。
? ? ? toLocalString()返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)。
? ? ? toString()返回對象的字符串表示。
? ? ? valueOf()返回對象的字符串,數(shù)值,布爾值表示,返回指定對象的原始值。
每個JavaScript固有對象的 valueOf 方法定義不同。
?
| 對象 | 返回值 |
| Array | 數(shù)組的元素被轉(zhuǎn)換為字符串,這些字符串由逗號分隔,連接在一起。其操作與 Array.toString 和 Array.join 方法相同。 |
| Boolean | Boolean 值。 |
| Date | 存儲的時間是從 1970 年 1 月 1 日午夜開始計的毫秒數(shù) UTC。 |
| Function | 函數(shù)本身。 |
| Number | 數(shù)字值。 |
| Object | 對象本身。這是默認(rèn)情況。 |
| String | 字符串值。 |
Math 和 Error 對象沒有 valueOf 方法。
三.函數(shù)
一. 函數(shù)使用function關(guān)鍵字來聲明,后跟一組參數(shù)及函數(shù)體。
function sayHi(name,message){
? ? ? alter("hello"+name+","+message);
}
函數(shù)的調(diào)用:通過函數(shù)名來調(diào)用,后面加一對圓括號和參數(shù)。
sayHi("Nike","How are you today?");
函數(shù)中return語句之后的任何代碼都永遠不會執(zhí)行
return 語句也可以不帶有任何返回值,這種情況 下,函數(shù)在停止執(zhí)行后將返回undefined值
function sum(num1,num2){
return num1+num2;
alter("Hello");//永遠不會被執(zhí)行
}
sum(5,10);
?二.javascript的函數(shù)參數(shù)
javascript的函數(shù)參數(shù)與其它語言有所不同,它不介意傳進來多少個參數(shù),也不介意傳進來的參數(shù)是什么數(shù)據(jù)類型。原因是javascript的函數(shù)參數(shù)在內(nèi)部是用一個數(shù)組來表示,函數(shù)接收到的始終是這個數(shù)組,不關(guān)心數(shù)組中包含哪些參數(shù),不包含參數(shù)也沒關(guān)系。在函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組,從而獲取傳遞給函數(shù)的每一個參數(shù)。
可以使用方括號語法訪問他的每個參數(shù)(arguments[0]第一個參數(shù),arguments[1]第二個參數(shù),。......)
通過arguments對象的length屬性可以獲得有多少個參數(shù)傳遞給了函數(shù),沒有傳遞值的命名參數(shù)將自動被賦予undefined值(ECMAScript中的所有參數(shù)傳遞的都是值,不可能通過引用傳遞參數(shù))
上面的函數(shù)可以重寫,不顯示地使用命名參數(shù):
function sayHi(){
? ? ? alter("hello"+arguments[0]+","+arguments[1]);//arguments[0]對應(yīng)與name參數(shù)
}
命名參數(shù)可以與arguments對象一同使用,arguments的值永遠與對應(yīng)的命名參數(shù)的值同步。修改命名參數(shù)的值不會改變arguments的值,修改arguments的值會改變命名參數(shù)的值。
function doAdd(num1,num2){
arguments[1]=10;
alert(arguments[0]+num2);//10
}
doAdd(0,20);
ECMAScript所有參數(shù)傳遞的都是值,不可能通過引用傳遞參數(shù)
三. ECMAScript函數(shù)沒有重載
重載是指定義兩個名字相同的函數(shù),只要這兩個定義的簽名(接受參數(shù)的類型和數(shù)量)不同即可。
ECMAScript中兩個名字相同的函數(shù),后定義的函數(shù)覆蓋了先定義的函數(shù)。
function addSomeNumber(num){
return num+100;
}
function addSomeNumber(num){
return num+200;
}
var result =?addSomeNumber(100); //300
?
注意:與其它語言不同,ECMAScript沒有為整數(shù)和浮點數(shù)值分別定義不同的數(shù)據(jù)類型,Numer類型可用于表示所有數(shù)值
ECMAScript中無須指定函數(shù)的返回值,因為任何ECMAScript函數(shù)都可以在任何時候返回任何值
ECMAScript函數(shù)中函數(shù)參數(shù)是以一個包含零或多個值的數(shù)組的形式傳遞的
可以向ECMAScript函數(shù)傳遞任意數(shù)量的參數(shù),并且可以通過arguments對象來訪問這些參數(shù)
轉(zhuǎn)載于:https://www.cnblogs.com/qinxuemei/p/4017981.html
總結(jié)
以上是生活随笔為你收集整理的学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试-微信红包测试点
- 下一篇: SpringCloud入门简述