JavaScript基礎知識
1、標籤組使用
<script
charset=’utf-8’ //設置字元集
defet //使腳本延遲到文檔解析完成,Browser已忽略
language=’javascript’ //設置語言,已廢棄
src=’url’ //引用外部檔,可選
type=’text/javascript’ //必選,language替代品
>代碼</script>
列印JavaScript結尾符(外部引用可直接打):‘<scr’+’ipt>’);
src引用JS後,不要在<script>和</script>之間加任何語句
2、判斷是否支持JavaScript
<noscript> 您沒有啟用JavaScript支持 </noscript>
<script type=’text/javascript’><!--語句--></script>
3、JavaScriptの核心是ECMAScript
首字母必須是字母、_或$
其他字母可是字母、_、$或數字
不可使用關鍵字、保留字、true、false、null
4、注釋
單行: //語句或文字
多行: /*
語句或文字
*/
多行美觀版: /*
*語句或文字
*/
5、數據類型
undefined、Boolean、string、number、object(含null)、function
初始化:
var box=’’; //字串初始化
var box=0; //數值初始化
var box=false; //布爾值初始化
6、Boolean型
每個類型の值都有對應的Boolean值
Stringの非空為真,空為假
Numberの非零為真,0為假
Objectの非null為真,null為假
undefined為假,其餘為真
7、Number類型
浮點型範圍:Number.MIN_VALUE到Number.MAX_VALUE
正無窮:Number.POSITIVE_INFINITY
負無窮:Number.NEGATIVE_INFINITY
是否超範圍:isFinite()
NaN:Not a Number(非數值)
如:0/0、12/0*0
是否NaN類型:isNaN()
NaNの類型:Number.NaN、NaN+1
Number()將非數值轉換成數值型
Number(‘’) //0
Number(null) //0
Number(false) //0
Number(true) //1
Number(undefined) //NaN
Number(‘345’) //345
Number(032) //26 八進制
Number(‘032’) //32
Number(‘08.90’) //8.9
Number(‘12A21’) //NaN
parseInt()把字串轉為字元型
parseInt(‘34M’) //34
parseInt(‘M51’) //NaN
parseInt(‘3M2’) //3
parseInt(‘12.34’) //12
parseInt(‘’) //NaN
parseInt(‘0xAF’) //175 十六進制
parseInt(‘070’) //56 八進制
第二個參數用於解決進制問題
parseInt(‘AF’,16) //175
parseInt(‘70’,8) //56
parseInt(‘1010’,2) //10
parseFloat()將string型轉為float型,不可識別十六/八進制
parseFloat(‘123M’) //123
parseFloat(‘0xA’) //0
parseFloat(‘123.4.5’) //123.4
parseFloat(‘012.300’) //12.3
parseFloat(‘1.2e3’) //1200
8、轉義字元
:換行 :製錶 ’:’ :回車 xnn:十六進制のASCII
\: :空格 ”:” f:換頁 unnn:Unicode值の符號
ASCII對應の十六進制 eg:x2B:+
String.fromCharCode(2B); //+,返回ASCII值對應的字元
0-9:30-39 A-Z:41-5A a-z:61-7A
Unicode值與對應の字元
6EE1:滿 6eff:滿 5B5D:孝 96EA:雪 306e:の 9ed1:黑
51ac:冬 6f2B:漫 85CF:藏 85e4:藤 98C4:飄 51B0:冰
toString()將值轉換成字串
var box=10;
box.toString(); //10,默認
box.toString(2); //1010,二進制
box.toString(8); //12,八進制
box.toString(16); //a,十六進制
若不知是否為null或undefined(toString()不可轉此二者),可用string()轉換
String(null); //null
String(undefined); //undefined
age=++box; //先box+1,再將值賦給age
age=box++; //先將值賦給age,再box+1
age=--box; //先box-1,再將值賦給age
age=box--; //先將值賦給age,再box-1
-、--、+、++對數值字串有隱形轉換類型功能
將false轉為0,true轉為1
+box:取正 -box:取負
加法の特殊:
1+’’;//1 1+NaN;//NaN 1+2; //3 Infinity+Infinity;//Infinity -Infinity+Infinity;//NaN
100+’100’;//100100 ‘abc’+10+20;//abc1020 10+20+’abc’;30abc ‘abc’+(10+20);//abc30
特殊の運算:var box={}; box=12+box; //新box為string型
減法の特殊:Infinity-Infinity;//NaN 100-’Lee’;//NaN 100-’70’;//30
乘法の特殊:100*’’;//0 10*null;//0 100*NaN;//NaN 100*true;//100 100*’Lee’;//NaN
除法の特殊:100/’’;//Infinity 100/’Lee’;//NaN Infinity/-Infinity;//NaN
求餘の特殊:100%null;//NaN 100%’Lee’;//NaN Infinity%Infinity;//NaN 100%true;//0
9、關係運算符
規則: ①若皆為數值,則比較
②若皆為字串,則比較首字元のASCII碼值
③首為數字,則轉為數進行比較
④false轉為0,true轉為1
⑤null與undefined相等
⑥NaN與任何值都不相等(含其自身)
⑦{}=={} //false,比較的是他們の地址
⑧undefined==0; null==0; //false
符號: ===(恆等)、!===(非恆等) 在此比較上,null和undefined不會轉為0,’’會轉為0
邏輯運算符:&&(與)、||(或)、!(非)
與(&&)的規則是:
第一項的Boolean值為false,則返回第一項的值
第一項的Boolean值為true,則返回第二項的值
簡記:一假返一,一真返二
與:一假為假,全真為真
或(||)的規則是:
第一項的Boolean值為true,則返回第一項的值
第一項的Boolean值為false,則返回第二項的值
簡記:一真返一,一假返二
或:一真為真,全假為假
非(!)的規則是:
false:非空字元串、非零數值(含Infinity)、對象
true:0、NaN、null、undefined、空字元串
Boolean()與!!の結果一樣
10、判斷語句
a?b:c; //若a為true則執行b,否則執行c
IF單句:if (條件) 語句;
IF復合語句:條件轉為Boolean類型進行判斷
if (條件){
語句;
}else{
語句;
}
或 if (條件){
語句;
}
IF分支語句:
if (條件){
語句;
}else if{
語句;
}
switch語句:break; 退出全循環 coutinue; 退出本次循環
switch(變量){
case 值 :
語句;
break;
default :
語句;
break;
}
do while語句:先執行一次再判斷
do{
語句;
} while (判斷語句);
while語句:先判斷再執行語句
while (判斷語句){
語句;
}
for語句:順序:先聲明,再判斷,三語句1,四語句2
for(聲明變量; 判斷; 語句2 ){
語句1;
}
for in語句:
for (var p in 對象){
語句;
}
with語句:將作用域設置到同一個對象中
var n=box.name; var a=box.age; var h=box.height;
等價於:with(box){
var n=name; var a=age; var h=height;
}
11、函數:
構造函數: function 函數名 (參數1,參數2……){
語句;
return 對象/值; //return還有一共能就是退出函數,即return之後の語句不再執行
}
動態用參: function box() {
if (arguments.length==0) return 對象/值;
for (var i=0; i<argument.length; i++){
語句;
return 對象/值;
}
}
創建方法: var man= new box(); ( new可省略,即var man= box(); ) 或 var man=box;
調用方法: man或man();
運行方法: man()或man()();
對象(屬性)賦值: box.name=’man’;
或 var box={
name=’man’,
……
}
給對象(屬性)創建方法: var box={
name : ‘man’,
run : function(){}
}
刪除對象:delete box.name;
空對象:var box={};
匿名對象:box({});
function調用:function box(obj){
if (obj.name!==undefined)語句;
}
13、數組
數組中可以是對象、字串、數值、數組等也可混用;
創建數組: var box=new Array();
var box=new Array(10); //new 可省略
var box=(‘man’,28,’華人’)
字面量法:
var box=[];
var box=[‘Man’,28,’華人’]
屬性: box.lenght; //獲取元素個數
box.lenght=10; //設置元素個數
box[box.lenght]=’js’; //給數組尾部加一個元素
堆棧: push()、pop() 後進先出
box.push(‘Man’); //數組尾部添加一元素,並返回新長度
box.unshift(‘xiao’,4) //數組頭部添加倆元素,並返回新長度
box.pop(); //移出最後一元素,並返回移出的元素
box.shift(); //移除數組頭部的元素,並返回移除的元素
box.join(‘|’); //返回用|分開的字串
box.reverse(); //逆向排序,並將結果返給原數組
box.sort(); //從小到大排序(依字串法,即2>10),結果返給原數組
基於當前數組建立新數組
var box2=box.concat(‘man’); //創建新數組並添加元素
box.slice(1); //從boxの第2個元素開始取,剩下の全取
box.slice(1,2); //取box第1元素到第2個元素,且將取出的元素從原數組中刪除
box.splice(0,2) //從box第1元素開始取2個元素
box.splice(1,0,’a’,’man’) //在box第1個元素後截取0個,插入2個(插入)
box.splice(1,1,100) //在box第1個元素後截取1個,插入1個(替換)
14、日期對象
創建:var date=new Date(); //返回類型:Mon Jun 13 2011 00:00:00 GMT+0800
Date()中可接收の類型:除Date.parse()和Date.UTC()所支持の類型,還可接收毫秒數和
方法: Date.parse(); //接收一表示日期の字串,並返回毫秒數
可接收の類型:6/3/2011、May 25,2004、Tue May 25 2004 00:23:22 GMT-070
Date.UTC(年,月,日,時,分,秒,毫秒) //前二者必須,返回毫秒數
月份為0-11,此日期為0時區,若在中國,會自動加上8h
格式化:date.toString(); //Thu Nov 15 2006 17:22:32 GMT+8
date.toLocaleString(); //2007-11-23 14:22:33
date.valueOf(); //返回毫秒數
date.toDateString(); //以特定的格式顯示星期幾、月、日和年
date.toTimeString(); //以特定的格式顯示時、分、秒和時區
date.toLocaleDateString(); //以特定地區格式顯示星期幾、月、日和年
date.toLocaleTimeString(); //以特定的格式顯示時、分、秒和時區
date.toUTCString(); //以特定的格式顯示完整的 UTC 日期
組件方法:
box.getTime(); //獲取日期的毫秒數,和 valueOf()返回一致
box.setTime(100); //以毫秒數設置日期,會改變整個日期
box.getFullYear(); //獲取四位年份
box.setFullYear(2012); //設置四位年份,返回的是毫秒數
box.getMonth(); //獲取月份,沒指定月份,從 0 開始算起
box.setMonth(11); //設置月份
box.getDate(); //獲取日期
box.setDate(8); //設置日期,返回毫秒數
box.getDay(); //返回星期幾,0 表示星期日,6 表示星期六
box.setDay(2); //設置星期幾
box.getHours(); //返回時
box.setHours(12); //設置時
box.getMinutes(); //返回分鐘
box.setMinutes(22); //設置分鐘
box.getSeconds(); //返回秒數
box.setSeconds(44); //設置秒數
box.getMilliseconds(); //返回毫秒數
box.setMilliseconds(); //設置毫秒數
box.getTimezoneOffset(); //返回本地時間和 UTC 時間相差的分鐘數,除此外,其他都有UTC功能,即中國のgetHours與getUTCHours相差8小時
15、正則表達式
創建: var box=new RegExp(‘box’ , ’ig’) //i:忽略大小寫;g:全局匹配;m:多行匹配
var box=/box/ig;
var box=new RegExp(‘box’);
var box=/box/;
檢測與替換:/box/i.test(‘This is a Box!’); //一句話法
box.test(str); //判斷str中是否有box,有返true
box.exec(str); //判斷str中是否有box,有返數組,無返null
str.match(box); //判斷str中是否有box,有返數組,無返null
str.search(box); //判斷str中是否有box,返回第一個匹配位置
str.replace(box,’tom’) //把str中匹配的box替換為tom,開啟全局模式,全換
str.split(box) //把str中匹配的box作為分割符生成一數組
靜態屬性: 屬性 : 短名 : 含義
input : $_ : 被匹配的字串
lastMarth : $& : 最有一個被匹配的字串
lastParen : $+ : 最後一對()匹配的字串
leftContext : $` : 最後一次匹配的字串
rightContext : $’ : 上次匹配之後的字串
multiline : $* : 所有表達式都用於多行布爾值
用法: box.test(str); //先執行一下
RegExp.input; //此為靜態屬性,輸出被匹配額字串,RegExp為靜態量
RegExp.[‘$_’] //第二種寫法
另注:input比較特殊,還有一種寫法:RegExp.$_,但是其他不可這麼用
實例屬性:
global:是否設置全局屬性,同g
ignoreCase:是否設置忽略大小寫,同i
multiline:是否支持換行,同m
source:正則表達式要匹配的字串
用法: var pattern = /google/ig; //需要先預先聲明
alert(pattern.global); //
這些實例屬性基本沒什麼用。並且 lastIndex 在獲取下次匹配位置上 IE 和其他流覽器有偏差,
主要表現在非全局匹配上。lastIndex 還支持手動設置,直接賦值操作。
特殊字元:
. //匹配除換行符外的任意字元
[a-z0-9] //匹配括弧中的字元集中的任意字元
[^a-z0-9] //匹配任意不在括弧中的字元集中的字元
d //匹配數字
D //匹配非數字,同[^0-9]相同
w //匹配字母和數字及_
W //匹配非字母和數字及_