JS的組成
? ? ? ? ECMAScript(ES) : 負責翻譯,為js的核心痛倚,解釋器蔓涧。
????????DOM?(Document Object Model 文檔對象模型):賦予js操作HTML的能力,document峡继。
????????BOM?(Browser Object Modal 瀏覽器對象模型):賦予js操作瀏覽器的能力,window雇卷,不兼容不建議使用鬓椭。
變量類型?
? ? ? ?5種基本類型:unll,undefined关划,boolean,number翘瓮,string
?????? 1種復雜類型:object
?????? 5種引用類型:Array贮折,Object,F(xiàn)unction资盅,Date调榄,RegExp
?????? 3種基本包裝類型:Boolean踊赠,Number,String
?????? 2種單體內置對象:Global每庆,Math
?????? undefined:沒有定義的變量筐带,var聲明沒有初始化的變量
? ? ? ?typeof?可查看變量類型,一個變量應只存一個類型的數(shù)據(jù)缤灵。
var a = 12;
// console.info(typeof a);? ? ? ? number
a = 'dwefeyui';
// console.info(typeof a);? ? ? ? string
a = true;
// console.info(typeof a);? ? ? ? boolean
a = function(){
? ? console.info('frgctgy');
};
// console.info(typeof a)? ? ? ? function
a = document;
// console.info(typeof a);? ? ? ? object
var b;
// console.info(typeof b);? ? ? ? undefined
// 1.真的未定義
// 2.雖然定義但是沒有給東西
顯式類型轉換(強制類型轉換)
????parseInt()?可將字符串轉換為數(shù)字(整數(shù))伦籍,parseFloat()可將字符串轉換為數(shù)字(小數(shù));
? ? var a = 'abc',?b = '20.5632';
? ? // console.info(parseInt(a)); ? ? ?NaN ? ?
? ? // console.info(parseInt(b)); ? ? ?20
? ? var a = '3.5';?
? ??console.info(parseFloat(a));? ? ? ?//3.5
? ? isNaN()?判斷該元素是否為NaN腮出,NaN表示(Not a Numer)帖鸦,兩個NaN之間不相等;
隱式類型轉換
雙等?==? 先轉換類型胚嘲,再進行比較作儿;(值相等,等式成立)
三等===? ?不轉換類型馋劈,直接比較攻锰;(值和類型必須相等,等式成立)
? ? ? ? var a = 5;
? ? ? ? var b = '5';
? ? ? ? // console.info(a==b); ? ? ?true
? ? ? ?//??console.info(a===b); ? ? //false
???減法也可做隱式類型轉換妓雾,但加法不行娶吞。
? ? ? ? var a = '12';
? ? ? ? var b = '5';
? ? ? ? // console.info(a+b); ? ?//125
? ? ? ? // console.info(a-b); ? ? ? //7
變量作用域
???????局部變量:只能在定義他的函數(shù)里面使用;
???????全局變量:在任何地方都能用君珠;
? ? ? ?閉包:子函數(shù)可以使用父函數(shù)的局部變量寝志。
? ? ? ?匈牙利命名法:類型前綴(僅給變量取名時需要),首字母大寫?
運算符
?????? +加策添、-減材部、*乘、/除唯竹,%求模(余數(shù))乐导。(隔行變色,秒轉時間)
賦值
??????? =浸颓、+=物臂、-=、*=产上、/=棵磷、%=。(i+=1等效于i=i+1)
邏輯
?????? &&并且晋涣、||或者仪媒、!否谢鹊;運算優(yōu)先級:括號算吩;
程序流程控制
????????判斷:if留凭、switch、偎巢?:三元目()運算符
? ? ?switch (變量) {
? ? ? ?? ?case 值1:
? ? ? ? ? ? 語句1 ;
? ? ? ?? ??? ?break;
? ? ? ? case 值2:
? ? ? ? ? ? 語句2;
? ? ? ?? ??? ?break;
? ? ? ?? ?default:
? ? ? ?? ??? ?語句n;
? ? ? ?? ??? ?break;
? ? ? };
? ? ? 條件?語句1:語句2;
?循環(huán):for蔼夜、while;跳出:break(中斷整個循環(huán))压昼、continue(中斷本次循環(huán));
? ? ? ?真和假
???????真(true):非0數(shù)字求冷、非空字符串、非空對象
???????假(false):數(shù)字0巢音、空字符串遵倦、null(空對象)、undefined
? ? ? ?JSON
???????和數(shù)組的區(qū)別:數(shù)組用 [ ]官撼,下標為數(shù)字梧躺,有l(wèi)ength,故循環(huán)時采用0 - length這種方法傲绣;
????????????????????????????? JSON用 { }掠哥,下標為字符串,沒有l(wèi)ength秃诵,故循環(huán)時用for in這種方法续搀;
? ? ? ? var json = {
? ? ? ? ?? ?a:12,
? ? ? ? ?? ?b:5,
? ? ? ? ?? ?c:'afy'
? ? ? ? };
? ? ? ? var arr = [12,5,'add'];
? ? ? ??//json.a++ ? ? ? ? //可像變量一樣操作
? ? ? ? console.info(json.a);?
? ? ? ?for(var i = 0;i<arr.length;i++){? ? ? ? ?
? ? ? ? ? ? ? ? console.info('第' + i + '個東西' + json[i]);
? ? ? ?} ? ??
? ? ?for(var i in json){
? ? ? ? ? ? ? ? console.info('第' + i + '個東西' + json[i]);
??????}
JS深入
函數(shù)返回值
? 將函數(shù)返到函數(shù)外面,為函數(shù)的執(zhí)行結果菠净,可做運算禁舷,一個函數(shù)應該只返回一種值。
? ? ? ? function show(a,b){
? ? ? ? ?? ?return a + b;
? ? ? ? }
? ? ? ? console.info(show(3,5));??
函數(shù)傳參
????????arguments?[ ] (可變參毅往,不定參):參數(shù)個數(shù)可變牵咙,為一個數(shù)組。
??????? css中傳兩個參數(shù)為獲取樣式攀唯,三個參數(shù)為設置樣式洁桌,一般給參數(shù)取名,增加可讀性侯嘀。
? ? ? ? function css (obj,name,value){
? ? ? ? ?? ?if(arguments.length == 2){ ? ? ?//獲取
? ? ? ? ? ? ? ? ?return obj.style[name]; ? ?
? ? ? ? ? ? ? ? ?//obj==arguments[0]另凌,以此類推
? ? ? ? ?? ?}else{
? ? ? ? ?? ??? ?obj.style[name] = value;
? ? ? ? ?? ?}?
? ? ? ? }
? ? ? ? window.onload = function(){
? ? ? ? ?? ?var oDiv = document.getElementById('div1');
? ? ? ? ?? ?// alert(css(oDiv,'width'));
? ? ? ? ?? ?css(oDiv,'background','green');
? ? ? ? }
getComputedStyle ()?用于獲取非行間樣式(FireFox、Chrome戒幔、Safari)吠谢、
currenStyle ()? ?也可(IE、Opera)诗茎,style用于獲取行間樣式囊卜。兼容性問題通常用if else處理
? ? ? ? <style>
?? ??? ?#div1{
?? ??? ??? ?width: 200px;
?? ??? ?}
?? ?</style>
?? ?<script>
? ? ? ? window.onload = function(){
? ? ? ? ?? ?var oDiv = document.getElementById('div1');
? ? ? ? ?? ?console.log(getComputedStyle(oDiv, false).width)
? ? ? ? ? ?}
? ? ? ? ?</script>
函數(shù)封裝
? 將需要多次用到的函數(shù)進行封裝方便調用。
? ? ? ? function getStyle(obj,name){ ? ? ? ? ? ? ? //封裝
? ? ? ? ?? ?if(ojb,currentStyle){
? ? ? ? ?? ??? ?return obj.currentStyle[name];
? ? ? ? ?? ?}else{
? ? ? ? ?? ??? ?return obj.getComputedStyle(obj, false)[name];
? ? ? ? ?? ?}
? ? ? ? }
? ? ? ? window.onload = function(){
? ? ? ? ?? ?var oDiv = document.getElementById('div1');
? ? ? ? ?? ?alert(getStyle(oDiv,'width'));
? ? ? ? }
上述getStyle()只能用于取單一的樣式错沃,如:width,height栅组;無法取出border等含有多個元素的樣式,
需寫成border-color等樣式枢析。
數(shù)組基礎
???有兩種寫法玉掸,一般采用第一個
? ? var a = [1,2,3];
? ? var a = new Array(1,2,3);
?屬性:length,可以用于獲取數(shù)組長度醒叁,也可設置司浪,一個數(shù)組中應該只存一種數(shù)據(jù)類型。
?????????添加把沼,刪除元素:push()啊易,從尾部添加;unshift()饮睬,從頭部添加租谈;pop(),從尾部刪除捆愁;shift()割去,從頭部刪除;
?????????刪除?splice(起點昼丑,長度)呻逆;插入/替換 splice(起點,長度菩帝,元素)咖城。
?? ?var arr = [1,2,3,4,5,6];
?? ?// arr.splice(2,3);
?? ?arr.splice(2,0,'a','b');?
?? ?console.info(arr);
???數(shù)組連接:concatt ( );?分隔符:join ( ) ;
? ? ? ? var a = [1,2,3];
? ? ? ? var b = [4,5,6];
? ? ? ? console.info(a.concat(b));
?? ?var arr = [1,2,3,4,5,6];
?? ?console.info(arr.join('--'));
數(shù)組排序:sort ( ) ,但通常將數(shù)組當做字符串來比較呼奢,導致排序數(shù)字時亂序宜雀。
?? ?var arr = [465,255,30,66,5,67];
?? ?arr.sort(function(n1,n2){ ? ? //比較函數(shù) ? ?
? ? ? ? ? ? ?return n1-n2;
? ? ? ? });
? ?consoel.info(arr);