摘要:基礎(chǔ)知識(shí)前端開發(fā)常用的瀏覽器谷歌瀏覽器內(nèi)核引擎火狐瀏覽器內(nèi)核歐朋瀏覽器內(nèi)核瀏覽器內(nèi)核瀏覽器內(nèi)核作為前端開發(fā),我們會(huì)使用編寫代碼,編寫代碼的時(shí)候要遵循一些規(guī)范瀏覽器開發(fā)商開發(fā)的瀏覽器,目的就是為了按照的規(guī)范,識(shí)別出開發(fā)者編寫的代碼,并且在頁面
JS基礎(chǔ)知識(shí) 前端開發(fā)常用的瀏覽器
谷歌瀏覽器(chrome):Webkit內(nèi)核(v8引擎)
火狐瀏覽器(firefox):Gecko內(nèi)核
歐朋瀏覽器(opera):Presto內(nèi)核
IE瀏覽器:Trident內(nèi)核
瀏覽器內(nèi)核:
作為前端開發(fā),我們會(huì)使用HTML/CSS/JS編寫代碼,編寫代碼的時(shí)候要遵循一些規(guī)范(W3C)JS的引入方式:瀏覽器開發(fā)商開發(fā)的瀏覽器,目的就是為了按照W3C的規(guī)范,識(shí)別出開發(fā)者編寫的代碼,并且在頁面中繪制出開發(fā)者預(yù)想的頁面和效果(GPU:顯卡),我們把瀏覽器中識(shí)別代碼繪制頁面的東西稱為瀏覽器的內(nèi)核和渲染引擎。
行內(nèi)式
嵌入式
外鏈?zhǔn)?/p>
JS中常用的輸出方式js中提供的瀏覽器彈框JavaScript1、alert:在瀏覽器中彈出一個(gè)提示框(提供確定按鈕,點(diǎn)擊確定彈框消失);使用alert彈框提示信息,提示的內(nèi)容最后都會(huì)被轉(zhuǎn)換為字符串輸出(調(diào)用了toString這個(gè)方法)
alert({name:"candy"});//=>"[object object]" alert([12,13]);//=>"12,13" alert(1+1);//=>"2"2、confirm:在alert基礎(chǔ)上增加了讓用戶選擇性的操作,(提供兩個(gè)按鈕:確定和取消)。當(dāng)用戶點(diǎn)擊的是確定按鈕的時(shí)候我們接收的是true,當(dāng)用戶點(diǎn)擊的是取消按鈕的時(shí)候我們接收的是false,此后我們可以根據(jù)接收的結(jié)果做不同的處理即可
3、prompt:在confirm上的基礎(chǔ)上增加了讓用戶輸入的效果;用戶點(diǎn)擊取消按鈕我們獲取到的結(jié)果是null;如果用戶點(diǎn)擊的是確定按鈕,我們將會(huì)獲取到用戶輸入的內(nèi)容(如果用戶沒有輸入任何內(nèi)容我們獲取的結(jié)果是空字符串)
注:真實(shí)項(xiàng)目中,尤其是需要樣式精美的網(wǎng)站中,我們的提示框一般都是自己封裝插件和組件來實(shí)現(xiàn),不會(huì)用內(nèi)置的(使用原生JS封裝模態(tài)框組件)
控制臺(tái)輸出方便開發(fā)員進(jìn)行調(diào)試的;F12(FN+12)打開瀏覽器的控制臺(tái)
console.log :在控制臺(tái)輸出,優(yōu)勢(shì)不會(huì)轉(zhuǎn)換數(shù)據(jù)類型,輸出什么格式的數(shù)據(jù)都可以
console.dir:比LOG輸出的更加詳細(xì)一些
console,table:把JSON數(shù)據(jù)展示稱為一個(gè)表格
...
ECMAScript(ES):規(guī)定了js的一些基礎(chǔ)核心的知識(shí)(變量、數(shù)據(jù)類型、語法規(guī)范、操作語句等)變量和常量DOM:document object model 文檔對(duì)象模型,里面提供了一些屬性和方法,可以讓我們操作頁面中的元素
BOM:browser object model 瀏覽器對(duì)象模型,里面提供了一些屬性和方法,可以讓我們操作瀏覽器
變量:值是可以變的常量:值是不可變得
//=>JS中定義變量的方式 //var 變量名 = 值;(ES6中定義變量使用let) var num=12; var str="candy"; //=>JAVA等后臺(tái)語言定義變量比較嚴(yán)謹(jǐn),JS比較松散 //int num=12; //float num=12.5; //double num=3.1415926; console.log(num);//=>12 變量其實(shí)只是一個(gè)無意義的名字 它所代表的意義都是其存儲(chǔ)的那個(gè)值 num=13;//=>讓原有的num變量存儲(chǔ)的值修改為13(變量只能代表一個(gè)值)
//=>任何一個(gè)具體的數(shù)據(jù)值都是常量,例如12就是一個(gè)常量 //=>和變量類似,我們?cè)O(shè)置一個(gè)常量(也是一個(gè)名字),給其存儲(chǔ)一個(gè)值,但是這個(gè)存儲(chǔ)的值不能修改 const num=12;//=>定義一個(gè)常量num,給他存儲(chǔ)了12(const是ES6新增的) num=13;//=>Uncaught TypeError: Assignment to constant variable.常量存儲(chǔ)的值是不能修改的。JS中的命名規(guī)范
1、JS中嚴(yán)格區(qū)分大小寫
var text="candy"; var Text="daisy"; console.log(text);//=>"candy" text和Text是兩個(gè)變量
2、遵循國(guó)際命名規(guī)則 駝峰命名法
第一個(gè)單詞首字母小寫,其余每一個(gè)有意的單詞首字母大寫
var studentInfo; //命名使用英文單詞,不要使用拼音 //不是所有單詞都能簡(jiǎn)寫,我們需要保證大家看到名字后知道所代表的意思 /*** info:information 信息 init:initialization 初始化 add/insert/creat:增加創(chuàng)建插入 remove/rm/clear/del/delete:刪除 update:修改 get/query/select:查詢獲取 ***/
3、命名的時(shí)候可以使用$、_ 、數(shù)字 、字母,但是數(shù)組不能作為名字的第一位
var student_info; var $xxx;//=>一般都是應(yīng)用JQ獲取到的值 var _xxx;//=>一般這樣的情況代表變量是一個(gè)全局或者公用的變量
4、JS中很多的詞都是有特殊含義的,我們管這些詞叫做關(guān)鍵字;現(xiàn)在沒有特殊含義,以后可能會(huì)作為關(guān)鍵詞的,我們叫做保留字;而關(guān)鍵字和保留字都不可以隨便用來命名
基本數(shù)據(jù)類型(值類型)
number:數(shù)字
string:字符串
boolean:布爾
null:空對(duì)象指針
undefined:未定義
引用數(shù)據(jù)類型
object對(duì)象數(shù)據(jù)類型
{}普通對(duì)象
[]數(shù)組
/^$/正則
...
function 函數(shù)數(shù)據(jù)類型
12 12.5 -12.5 0 "candy" "daisy"=>單雙引號(hào)包裹起來的都是字符串(單雙引號(hào)沒有區(qū)別) true false=>布爾類型:只有兩個(gè)值 null undefined {name:"candy",age"28"} [12,23,34] /^-?(d|([1-9]d+))(.d+)?$/ function fn(){}
這么多數(shù)據(jù)類型JS如何的去檢測(cè)呢?
typeof :檢測(cè)數(shù)據(jù)類型的運(yùn)算符
instanceof :檢測(cè)某個(gè)實(shí)例的構(gòu)造器
constructor:獲取當(dāng)前實(shí)例的構(gòu)造器
Object.prototype.toString.call:獲取當(dāng)前實(shí)例的所有類信息
typeof
使用typeof檢測(cè)返回的是一個(gè)字符串,字符串中包含的內(nèi)容證明了值是屬于什么類型的[局限性]
1、typeof null不是“null”而是object:因?yàn)閚ull雖讓是多帶帶的一個(gè)數(shù)據(jù)類型,但是它原本的意思是空對(duì)象指針,瀏覽器使用typeof檢測(cè)的時(shí)候會(huì)把他按照對(duì)象來檢測(cè)
2、使用typeof 無法具體細(xì)分出到底是數(shù)組還是正則,因?yàn)榉祷氐慕Y(jié)果都是”object“
typeof 12;//=>"number" var num=13; typeof num;//=>"number"
騰訊的面試題:
console.log(typeof typeof []);//=>"string"布爾
Boolean
把其它數(shù)據(jù)類型的值轉(zhuǎn)換為布爾值只有0、NaN、空字符串、null、undefind這五個(gè)數(shù)據(jù)轉(zhuǎn)換為布爾類型的false,其余都會(huì)變?yōu)閠rue
!
!=:不等于嘆號(hào)在js中還有一個(gè)作用:取反,先把值轉(zhuǎn)換為布爾類型,然后在去取反
!!
在一個(gè)嘆號(hào)取反的基礎(chǔ)上在取反,取兩次反相當(dāng)于沒有做操作,但是卻已經(jīng)把其他類型值轉(zhuǎn)換為布爾類型了,和Boolean是相同的效果字符串
在JS中單引號(hào)和雙引號(hào)包起來的都是字符串
12->number "12"->string "[12,13]"->string
常用方法:
charAt charCodeAt
substr substring slice
toUpperCase toLowerCase
indexOf lastIndexof
split
replace
match
...
number數(shù)字JS中多增加了一個(gè)number類型的數(shù)據(jù)NaNtypeof NaN ->"number"
NaN
not a number:不是一個(gè)數(shù),但是屬于number類型NaN==NaN:false,NaN和任何其它值都不相等
isNaN()
用來檢測(cè)當(dāng)前這個(gè)值是否是非有效數(shù)字,如果不是有效數(shù)字檢測(cè)的結(jié)果是true,反之是有效數(shù)字則為false
isNaN(0);//->false isNaN(NaN);//->true isNaN("12");//->false 當(dāng)我們使用isNaN檢測(cè)值的時(shí)候,檢測(cè)的值不是number類型的,瀏覽器會(huì)默認(rèn)的把值先轉(zhuǎn)換為number類型,然后再去檢測(cè) isNaN([]);//false 先運(yùn)行Number()方法把[]轉(zhuǎn)換成0 然后在判斷isNaN,零為有效數(shù)字,所以是false
Number()
把其它數(shù)據(jù)類型值轉(zhuǎn)化為number類型的值
Number("12");//=>12 Number("12px");//=>NaN 在使用Number轉(zhuǎn)換的時(shí)候只要字符串中出現(xiàn)任何一個(gè)非有效數(shù)字字符,最后的結(jié)果都是NaN Number(true);//=>1 Number(false);//=>0 Number(null);//=>0 Number(undefined);//=>NaN Number([]);//=>0 把引用數(shù)據(jù)類型轉(zhuǎn)換為number,首先需要把引用數(shù)據(jù)類型轉(zhuǎn)為字符串(toString),再把number即可 例如[]=>"" ""=>0 Number([12]);//=>[12]=>"12" "12"=>12 Number([12,13]);//=>[12,13]=>"12,23"=>NaN Number({name:"candy"})//=>NaN Number({});//=>NaN
parseInt
也是把其他數(shù)據(jù)類型值轉(zhuǎn)換為number,和Number方法在處理字符串的時(shí)候有所區(qū)別
Number("12px");//=>NaN parseInt("12px");//=>12 parseInt("12px13");//=>12 提取規(guī)則:從左到右一次查找有效數(shù)字字符,直到遇見非有效數(shù)字字符為止(不管后面是否還有,都不找了),把找到的轉(zhuǎn)換為數(shù)字 parseInt("px12");//=>NaN
parseFloat
在parseInt的基礎(chǔ)上可以識(shí)別小數(shù)點(diǎn)
parseInt("12.5px")->12 parseFloat("12.5px")->12.5
擴(kuò)展思考:parseInt常用的只需要傳遞一個(gè)值做參數(shù)即可,但是它支持多個(gè)參數(shù),回去后擴(kuò)展其它參數(shù)的意思
parseInt(string,radix)null和undefined
null:空,沒有undefined :未定義
”“:空字符串沒有
0:也可以理解為沒有
空字符串和null的區(qū)別
比喻:都是去種樹空字符串屬于挖了個(gè)坑,但是沒有任何東西
null是連坑都沒挖
空字符串相對(duì)null來說開辟了內(nèi)存
null和undefined的區(qū)別
null一般都是暫時(shí)沒有,預(yù)期中以后會(huì)有的(可能以后也沒有達(dá)到預(yù)期):在Js中null一般都是手動(dòng)先賦值為null,后期我們?cè)诮o其賦具體值對(duì)象數(shù)據(jù)類型objectundefined:完全沒有預(yù)料之內(nèi)的
var obj={name:"candy",age:"28"}每一個(gè)對(duì)象都是由零到多組屬性名:屬性值(value值)組成的,或者說由多組鍵值對(duì)組成的,每組鍵值對(duì)中間用逗號(hào)分隔
屬性:描述這個(gè)對(duì)象特點(diǎn)特征的
對(duì)象的屬性名是字符串或者數(shù)字格式的,存儲(chǔ)的屬性值可以是任何的數(shù)據(jù)類型
對(duì)象名.屬性名:忽略了屬性名的單雙引號(hào)
對(duì)象名[屬性名]:不能忽略單雙引號(hào)
var obj={name:"candy",age:"28",otherName:["daisy","lily"]}; //=>獲取某個(gè)屬性名對(duì)應(yīng)的屬性值 obj.name obj.["name"] //->如果屬性名是數(shù)字如何操作 obj.0 //語法不支持 //obj[0]/ obj["0"] //兩種都可以支持 //如果操作的屬性名在對(duì)象中不存在,獲取的結(jié)果是undefined obj.sex//->undefined //=>設(shè)置/修改:一個(gè)對(duì)象的屬性名是不能重復(fù)的(唯一性),如果之前存在就是修改屬性操作值的操作,反之不存在就是新設(shè)置屬性的操作 obj.sex="男"; obj["age"]=9; //=> 刪除 //=>假刪除:讓其屬性值賦值為null,但是屬性還在對(duì)象中 obj.sex=null; //=>真刪除:把整個(gè)屬性都在對(duì)象中暴力移除 delete obj.sex;
思考題:obj[age]和obj["age"]有什么樣的區(qū)別?
var obj={name:"candy",age:28}; var age="name"; obj[age];//=>obj[age變量]=>obj["name"]=>獲取name屬性名的屬性值=>candy obj["age"];//=>28 //age:變量名,代表的是它存儲(chǔ)的值 //"age":常量,字符串的具體值。 //obg[age]操作的是對(duì)象中的屬性,并不是操作的變量,所以是操作變量所存儲(chǔ)的值,也就相當(dāng)于obj["name"],而obj["age"]就是操作的obj對(duì)象中的age屬性,所以值就是age本身。基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別
js是運(yùn)行在瀏覽器中的(內(nèi)核引擎),瀏覽器會(huì)為js提供賴以生存的環(huán)境(提供給js代碼執(zhí)行的環(huán)境)=>全局作用域window(global)
var a=12; var b=a;//=>把a(bǔ)變量存儲(chǔ)的值賦值給b b=13; console.log(a); var n={name:"candy"}; var m=n; m.name="daisy"; console.log(n.name);
基本數(shù)據(jù)類型是按值操作的:基本數(shù)據(jù)類型在賦值的時(shí)候,是直接把值賦值給變量即可;
引用數(shù)據(jù)類型是按照空間地址(引用地址)來操作的:
var n={name:"candy"}函數(shù)數(shù)據(jù)類型1、先創(chuàng)建一個(gè)變量n
2、瀏覽器首先會(huì)開辟一個(gè)新的存儲(chǔ)空間(內(nèi)存空間),目的是把對(duì)象中需要存儲(chǔ)的內(nèi)容(鍵值對(duì))分別的存儲(chǔ)在這個(gè)空間中,為了方便后期找到這個(gè)空間,瀏覽器給空間設(shè)定了一個(gè)地址(16進(jìn)制的)
3、把空間的地址賦值給了變量
函數(shù)數(shù)據(jù)類型也是按照引用地址來操作的函數(shù):具備一定功能的方法
//=>創(chuàng)建函數(shù):相當(dāng)于生產(chǎn)了一臺(tái)洗衣機(jī) function 函數(shù)名(){ //=>函數(shù)體:實(shí)現(xiàn)某一個(gè)功能的具體js代碼 } //=>執(zhí)行函數(shù):相當(dāng)于使用洗衣機(jī)洗衣服(如果函數(shù)值創(chuàng)建了但是沒有執(zhí)行,函數(shù)沒有任何意義) 函數(shù)名();
function fn(){ console.log(1+1); } fn;//=>輸出函數(shù)本身 fn();//2 =>把函數(shù)執(zhí)行(把函數(shù)體中實(shí)現(xiàn)功能的代碼執(zhí)行)
//=>形參:形式參數(shù)(變量),函數(shù)的入口 //當(dāng)我們創(chuàng)建一個(gè)函數(shù)想要實(shí)現(xiàn)某個(gè)功能的時(shí)候,發(fā)現(xiàn)有一些材料并不清楚,只有當(dāng)函數(shù)運(yùn)行的時(shí)候,別人傳遞給我,我才知道,此時(shí)我們就需要設(shè)定入口,讓用戶執(zhí)行的時(shí)候通過入口把值給我們。 function fn(a,b){ console.log(a+b); } //=>實(shí)參:函數(shù)執(zhí)行傳遞給函數(shù)的具體值就是實(shí)參 fn(3,2); fn(4,3);判斷操作語句
if、else if、else
if(條件1){ //=>條件1成立執(zhí)行的操作 }else if(條件2){ //=>上面條件不成立,條件2成立,執(zhí)行的操作 } ... else{ //=>以上條件都不成立執(zhí)行的操作 } //如果好幾個(gè)條件都成立了,只把第一個(gè)成立的條件執(zhí)行,后天成立的條件忽略不管 /*** 條件:A==B、A!=B、A>=B、A先把A轉(zhuǎn)換為布爾類型,判斷真假以此來判定條件是否成立 if(A>B && AB || A BAT面試題:
var num=parseFloat("width:12.5px");//NaN if(num==12.5){ alert(12.5); }else if(num==NaN){//NaN!=NaN alert(NaN); }else if(typeof num=="number"){//=>typeof NaN->"number" alert(0);//=>"0"; }else{ alert("啥也不是"); }三元運(yùn)算符
條件?條件成立執(zhí)行:條件不成立執(zhí)行if(條件){}else{}:三元運(yùn)算符就是這種簡(jiǎn)單if、else的另外一種寫法
if(num>5 && num<=10){ num++; //num+=1 num=num+1 自身累加1 }else{ num--; } //=>改寫成三元運(yùn)算符 num>5 && num<=10?num++:num--;var num=10; if(num>5 && num<=10){ num++; //num+=1 num=num+1 自身累加1 } //=>改寫成三元運(yùn)算符:如果條件成立或者不成立的某一種情況并不需要做什么處理,我們空著語法不符合,我們使用null、undefined、void 0(就是undefined)占位即可 num>5 && num<=10?num++:null;var num=10; if(num>5 && num<=10){ num++; //num+=1 num=num+1 自身累加1 console.log(num); } //=>改寫成三元運(yùn)算符:某一種情況執(zhí)行多條操作,使用小括號(hào)包起來,中間用逗號(hào)分隔 num>5 && num<=10?(num++,console.log(num)):null;var num=10; if(num>5 && num<=10){ num++; break;//continue;/return; } //=>改寫成三元運(yùn)算符:在三元運(yùn)算符的操作中不能出現(xiàn)break,continue,return 這些關(guān)鍵詞,我們無法用三元運(yùn)算符代替if、else num>5 && num<=10?(num++,return):null; //=>Uncaught SyntaxError :語法錯(cuò)誤var num=0; num>0?(num<10?num++:num--):(num>-10?num+=2:num-=2); //=>改寫成if else if(num>0){ if(num<10){ num++; }else{ num--; } }else{ if(num>-10){ num+=2; }else{ num-=2; } }switch caseswitch case 引用于if、else中一個(gè)變量在不同值情況下的不同操作var num=10; switch(num){//=>switch后面小括號(hào)中存放的是一個(gè)值(一般我們都寫變量:把變量存儲(chǔ)的值拿來用,有時(shí)候也可能是一個(gè)計(jì)算) case 1: ... break; case 10://=>case后面放入的都是值,目的是驗(yàn)證switch后面的值和哪一種case后面的值相等,相等的進(jìn)行對(duì)應(yīng)的處理 ... break;//=>每一種case結(jié)束后都要加break,結(jié)束當(dāng)前的判斷 default://=>switch后面的值和每一種case情況對(duì)應(yīng)的值都不相等,執(zhí)行最后的default,類似于else ...案例分析
var num=5; switch(num%2){//=>想把取余操作進(jìn)行運(yùn)算,那運(yùn)算結(jié)果和case比較 case 1: num++; break; case 2-1://=>case后面也應(yīng)該是值,此處先把2-1計(jì)算,把計(jì)算的結(jié)果和switch值比較 num--; //=>最后一項(xiàng)可以不加break,不加也能跳出判斷 } //num%2:讓num存儲(chǔ)的值除以2取余數(shù)(0或者1)var num=5; switch(num%3){ case 0: num++;//=>不加break,不管后面的條件是否成立,都會(huì)繼續(xù)向下執(zhí)行,直到遇到break為止 case 1: num--; break; default: num=0; } //=>小應(yīng)用:把符合某幾項(xiàng)值都去做同一件事情,使用不加break來實(shí)現(xiàn) switch(num%3){ case 0: case 1://=>余數(shù)是0或1都執(zhí)行減減的操作 num--; break; default: num=0; }var num="6"; switch(num){ case 0: num++; break; case 6: num--; break; default: num=0; } //=>num=0; //switch case 中的比較使用的是:===(全等) /*** =:賦值,等號(hào)左邊是變量,右邊是值 ==:比較,如果左右兩邊值的類型不一樣,瀏覽器會(huì)默認(rèn)轉(zhuǎn)換為一樣的然后在進(jìn)行比較 ===:絕對(duì)相等,不僅要求值一樣,并且類型也完全一樣 ***/循環(huán)操作語句循環(huán):重復(fù)做一件事情for循環(huán)
for(設(shè)置循環(huán)起始值;設(shè)置循環(huán)執(zhí)行的條件;步長(zhǎng)累加){ //=>循環(huán)體:重復(fù)做的事情都在循環(huán)體中 }案例剖析
//1、設(shè)置初始值 //2、驗(yàn)證條件 //3、條件成立,執(zhí)行循環(huán)體;不成立,循環(huán)結(jié)束 //4、步長(zhǎng)累加 for(var i=0;i<5;i++){ console.log(i);//=>1 2 3 4 } console.log(i);//5var i=0; for(;i<5;){ console.log(i); } console.log(i);//=>=>沒有步長(zhǎng)累加,我們的i永遠(yuǎn)是0,循環(huán)條件永遠(yuǎn)成立"死循環(huán)":項(xiàng)目中不能出現(xiàn)死循環(huán),一旦出現(xiàn),循環(huán)下面的事情都做不了var i=0; for(;i<5;i+=2){ console.log(i);//0 2 4 } console.log(i)//6for(var i=0;i<5;i+=2){ console.log(i); continue;//=>結(jié)束本輪循環(huán),繼續(xù)執(zhí)行下一輪:循環(huán)體中continue后面的代碼都不會(huì)再執(zhí)行,他會(huì)直接的去執(zhí)行步長(zhǎng),然后進(jìn)入到下一輪 ... } console.log(i)//6for(var i=0;i<5;i+=2){ console.log(i); break;//=>結(jié)束整個(gè)循環(huán):循環(huán)體中一旦遇到break,首先后面的代碼不執(zhí)行了,而且步長(zhǎng)累加也不執(zhí)行了,循環(huán)都結(jié)束了 ... } console.log(i)//=>0BAT面試題:
for(var i=1;i<10;i+=2){ if(i<5){ i++;//2 5 continue; }else{ i+=3;//9 break; } console.log(i); } console.log(i);//10 //輸出1次 值為10for in循環(huán)
//=>for in:用來遍歷(循環(huán))對(duì)象鍵值對(duì)的 var obj={name:"candy",age:"28",1:"daisy",2:"lily",3:"candice",2.5:"呵呵"}; //=>var key; var attr(attribute); //=>默認(rèn)情況下對(duì)象中有多少組鍵值對(duì),我們的FOR IN循環(huán)就遍歷多少次(不一定) //=>每一次循環(huán)KEY這個(gè)變量存儲(chǔ)的都是當(dāng)前循環(huán)這組鍵值對(duì)的屬性名 //1、KEY存儲(chǔ)的值都是字符串格式的(不管屬性名是否為數(shù)字) //2、在FOR IN循環(huán)遍歷的時(shí)候,大部分瀏覽器都是先把對(duì)象中的鍵值對(duì)進(jìn)行排序(把數(shù)字屬性名的排在前面,并且排列的時(shí)候按照數(shù)字由小到大排了),其次在把非數(shù)字的屬性名按照之前編寫的順序排列,循環(huán)的時(shí)候按照重新排列的順序依次遍歷(小數(shù)算作字母不算做數(shù)字) for(var key in obj){ console.log(typeof key);//=>"string" //key->屬性名 "name"/"age"... console.log(obj.key);//->undefined 獲取obj中key這個(gè)屬性對(duì)應(yīng)的屬性值 <=>obj["key"] console.log(obj[key]);//=>每一次循環(huán)吧key變量存儲(chǔ)的值(當(dāng)前遍歷的屬性名)獲取到放在中括號(hào)中,獲取obj中對(duì)應(yīng)屬性的屬性值 }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95687.html
摘要:最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺很遙遠(yuǎn)。為了快速進(jìn)入后臺(tái)的開發(fā),我也要加快腳步了 showImg(https://segmentfault.com/img/remote/1460000016070790?w=899&h=499); 最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)Java后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺...
摘要:最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺很遙遠(yuǎn)。為了快速進(jìn)入后臺(tái)的開發(fā),我也要加快腳步了 showImg(https://segmentfault.com/img/remote/1460000016070790?w=899&h=499); 最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)Java后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺...
摘要:最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺很遙遠(yuǎn)。為了快速進(jìn)入后臺(tái)的開發(fā),我也要加快腳步了 showImg(https://segmentfault.com/img/remote/1460000016070790?w=899&h=499); 最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)Java后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺...
摘要:最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺很遙遠(yuǎn)。為了快速進(jìn)入后臺(tái)的開發(fā),我也要加快腳步了 showImg(https://segmentfault.com/img/remote/1460000016070790?w=899&h=499); 最近的計(jì)劃是業(yè)余時(shí)間學(xué)習(xí)Java后臺(tái)方面的知識(shí),發(fā)現(xiàn)學(xué)習(xí)的過程中,要學(xué)的東西真多啊,讓我一下子感覺...
摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...
閱讀 3255·2021-09-23 11:55
閱讀 2587·2021-09-13 10:33
閱讀 1654·2019-08-30 15:54
閱讀 3085·2019-08-30 15:54
閱讀 2356·2019-08-30 10:59
閱讀 2361·2019-08-29 17:08
閱讀 1793·2019-08-29 13:16
閱讀 3581·2019-08-26 12:25