什么是一個(gè)變量
變量就是一個(gè)容器
如何創(chuàng)建一個(gè)變量
var 容器的名稱
var x;? 創(chuàng)建一個(gè)叫x的容器
命名規(guī)則
名字區(qū)分大小寫
?不可以用漢字
可以是使用英文大小寫 - $
不能用數(shù)字開(kāi)頭
不可用關(guān)鍵字和保留字作為變量名
關(guān)鍵字和保留字是js在開(kāi)發(fā)的時(shí)候赁酝,自己內(nèi)部使用過(guò)的一些具有某些特征的單詞番枚,
?這些單詞被js使用了捣辆,我們?cè)诙x變量的時(shí)候就不能在使用了
賦值符的右邊是值
? ? ? ? ? ? ? ? 左邊是變量
賦值符將右邊的值放到左邊的變量中存起來(lái)
自增(++)和自減(--)
var a=2;
a++;
放前面后面都一樣都表示自增掠剑;
console.log(a);
當(dāng)自增自減運(yùn)算碰到輸出的時(shí)候苍鲜,++在前面就先進(jìn)行++自增柜裸,然后再輸出
如果++在后面错森,就是先輸出這個(gè)值峻仇,然后再進(jìn)行++自增
?++在前面和后面的區(qū)別俄讹,還有別的情況:進(jìn)行數(shù)學(xué)運(yùn)算哆致、輸出、賦值的時(shí)候
總結(jié):
?如果自增自減運(yùn)算碰到 輸出患膛、賦值摊阀、數(shù)學(xué)運(yùn)算的時(shí)候,符號(hào)在前面就先進(jìn)行自增自減運(yùn)算,然后進(jìn)行輸出胞此、賦值臣咖、數(shù)學(xué)運(yùn)算,如果符號(hào)在后面漱牵,
就是先進(jìn)行輸出夺蛇、賦值、數(shù)學(xué)運(yùn)算酣胀,然后再進(jìn)行自增自減運(yùn)算
如果是自己?jiǎn)为?dú)的一個(gè)變量進(jìn)行自增自減的時(shí)候刁赦,符號(hào)放在變量前面和后面沒(méi)有區(qū)別
字符串的拼接:
var a=1;
var b='23';
var c=a+b;
+只有左右兩邊有一個(gè)是字符串,就會(huì)使這兩個(gè)字符串連在一起組成一個(gè)大的字符串
console.log(c);? 輸出字符串的123
var a;
var b=null;?
var c=a+b;
?console.log(c);? 輸出NAN
var a='qaaz'
var b='cvv'
var c=a+b;
console.log(c);? 形成新的字符串qaazcvv
將數(shù)據(jù)顯示在頁(yè)面中
alert數(shù)據(jù) 將數(shù)據(jù)以彈窗的形式在頁(yè)面顯示 通常在給用戶做提示
document.write(a); //以文本的形式顯示在網(wǎng)頁(yè)中
confirm.log(a);// 提示用戶是否確定和取消的彈窗闻镶,提示用戶是否確定進(jìn)行下一步操作? 例:
confirm("你確定要?jiǎng)h除嗎");
var a=confirm("你確定要?jiǎng)h除嗎");
prompt(a);提示用戶可以輸入的彈窗
例:var a=prompt("輸入你的銀行卡密碼:");
數(shù)學(xué)運(yùn)算符
符號(hào)有+? -? *? /? %(取余的)
數(shù)據(jù)類型
typeof?用來(lái)檢測(cè)數(shù)據(jù)的類型
js有5種數(shù)據(jù)類型:number(數(shù)字類型)甚脉、string(字符串類型)、underfined(未定義型)儒溉、boolean(布爾類型 只有true? false兩個(gè)值用來(lái)描述事物的兩面性)宦焦、object(對(duì)象類型)
數(shù)字類型number包含哪些數(shù)據(jù) 正數(shù),負(fù)數(shù)顿涣。整數(shù),小數(shù) 酝豪,0
string字符串 一串字符組合起來(lái)用引號(hào)引起來(lái)涛碑,單引號(hào)雙引號(hào)都行
布爾類型:編程中,有一種類型用來(lái)描述對(duì)與錯(cuò)孵淘,真和假蒲障,表示事物的兩面性 boolean,?布爾類型只有兩個(gè)值:true? false
對(duì)象類型 object
var a=[]; 數(shù)組
var a={}; json對(duì)象
var a=null; 表示空 什么都沒(méi)有
數(shù)據(jù)類型轉(zhuǎn)number
1.var b=Number(a); // 將轉(zhuǎn)換的結(jié)果賦值給了子變量b
?console.log(b);
console.log(typeof b);
2.parseInt(被轉(zhuǎn)換的數(shù)據(jù)); // 支取整數(shù)部分
?var b=parseInt(a);
console.log(b);?
3.parseFloat(被轉(zhuǎn)換的數(shù)據(jù)); 將數(shù)據(jù)轉(zhuǎn)成數(shù)字中的小數(shù) 沒(méi)有變
var b=parseFloat(a);
console.log(b);
4.Math.round(被轉(zhuǎn)換的數(shù)據(jù)); 將數(shù)據(jù)轉(zhuǎn)成數(shù)字并四舍五入
? ? var b=Math.round(a);
? ? console.log(b);
總結(jié):
數(shù)字型的字符串瘫证,Number和parseFloat轉(zhuǎn)換的結(jié)果時(shí)一樣的揉阎, parseInt時(shí)支取整數(shù)部分。
不是純數(shù)字的字符串背捌,但是由數(shù)字開(kāi)頭的毙籽,Nunmber和Math.round轉(zhuǎn)成的時(shí)NaN,也是parseInt
取整,parseFloat取小數(shù)部分
不是由數(shù)字開(kāi)頭的字符串毡庆,被轉(zhuǎn)換的結(jié)果都是NaN坑赡。
數(shù)轉(zhuǎn)字符串
var a=10; //a是數(shù)字類型
var b=String(a);? ? // String(被轉(zhuǎn)換的數(shù)據(jù))
console.log(b);
toString() // 被轉(zhuǎn)換的額數(shù)據(jù) .toString
var b=a.toString();
console.log(b);
布爾值轉(zhuǎn)字符串
var a =true;
var b =String(a);
console.log(b);
underfined轉(zhuǎn)字符串
var a;
var b=String(a);
console.log(b);
null轉(zhuǎn)字符串
var a=null;
var b=String(a);
console.log(b);
數(shù)字轉(zhuǎn)布爾類型
var a=1;
var b=Boolean(a);
console.log(b);
數(shù)字轉(zhuǎn)布爾類型,除了0都是ture 0是false
字符串轉(zhuǎn)布爾類型
var a='';
var b=Boolean(a);
console.log(b);
字符串轉(zhuǎn)成布爾類型么抗,除了空字符串是false 其他都是true
undefined轉(zhuǎn)布爾類型??-false
var a;
?var b=Boolean(a);
console.log(b);
null轉(zhuǎn)布爾 -false
? ? var a=null;
? ? var b=Boolean(a);
? ? console.log(b);
比較符運(yùn)算
比較運(yùn)算:> < >= <= ==
==相等 比較兩個(gè)容器中的值是否一樣 也是布爾值顯示
===? ?全等? 先比較兩個(gè)值的類型是否相等毅否,如果不相等就直接false,如果相等了在進(jìn)行比較值
????????????主體到內(nèi)容都要一樣
!=絕對(duì)不等于 類型同上
賦值運(yùn)算
=賦值符右邊是值 左邊是變量 作用是將右邊的值賦給左邊的變量
+=代表相加以后的結(jié)果重新賦值給這個(gè)變量(其他運(yùn)算同理)
邏輯運(yùn)算符
||? ?表示或者? ? ? ?只有全假才假
&&? 表示并且? ? ? 一假即假
if 單分之 只有一條路可以做 那么就選擇不走
語(yǔ)法
?if(條件-最終結(jié)果必須是一個(gè)布爾類型){
? ? ? ? // 條件如果是ture ,就執(zhí)行這里的代碼
? ? ? ? // 條件如果是false ,就沒(méi)有顯示
? }
有兩條路可以走 選擇其中一條走 雙分支
語(yǔ)法
if(結(jié)果是布爾類型的條件){
? ? 條件是true的時(shí)候執(zhí)行的代碼
}else{
? ? 條件是false的時(shí)候執(zhí)行的代碼
}
多分支語(yǔ)法
if(條件){
//? ? 條件為true的時(shí)候執(zhí)行的代碼
}
else if(條件){
//? ? 如果條件為true的時(shí)候執(zhí)行的代碼
?}
else if(){
?}...
多分枝
switch(變量- 得到一個(gè)值){
? ? case 值1:
? ? 如果小括號(hào)里的值和值1相等了 就執(zhí)行代碼
? ? break;
? ? case 值2:
? ? 如果小括號(hào)里的值和值2相等了 就執(zhí)行代碼
? ? break;
? ? case 值3:
? ? 如果小括號(hào)里的值和值3相等了 就執(zhí)行代碼
? ? break;
? ? ....
? ? default:
? ? 上面的值都不相等時(shí) 蝇刀,執(zhí)行的代碼
}
注意:代碼中螟加,如果要判斷一個(gè)區(qū)間,使用if多分支,
如果判斷具體的值是否相等使用switch語(yǔ)句捆探;
switch 總結(jié)
1.switch只能判斷是否相等
2.判斷使用===來(lái)進(jìn)行
?3.break是來(lái)終止switch執(zhí)行甸昏,去掉以后,就會(huì)執(zhí)行下一個(gè)case
分支嵌套
if(){
? ? ? ? if(){
? ? ? ? }
? ? }
總結(jié):
switch和if都能進(jìn)行多分支的判斷
switch和if的區(qū)別徐许;
1.switch只能判斷是否相等施蜜,使用絕對(duì)等于===來(lái)判斷的
2.break可以省略---造成執(zhí)行了第一個(gè)case之后,執(zhí)行第二個(gè)case
3.switch 在分支大于3個(gè)的時(shí)候雌隅,效率要比if多分支高
? ? // 如果判斷某個(gè)值的翻默,并且分支結(jié)果大于3個(gè)的,使用swith
隱式轉(zhuǎn)化
字符串拼接時(shí)
var a=11;
var b="222";
var c=a+b;
加號(hào)左右兩邊有一個(gè)是字符串恰起,另一個(gè)也會(huì)悄悄的轉(zhuǎn)成字符串
console.log(c);
數(shù)學(xué)運(yùn)算時(shí)
var a=10;
var b="2";
var c=a-b;
數(shù)字才能進(jìn)行數(shù)學(xué)運(yùn)算修械,這個(gè)時(shí)候字符串悄悄的的轉(zhuǎn)成了數(shù)字;
除了+ 別的數(shù)學(xué)運(yùn)算检盼,都會(huì)將兩邊的數(shù)字轉(zhuǎn)成數(shù)字進(jìn)行運(yùn)算
console.log(c);
進(jìn)行比較的時(shí)候
var a=prompt('輸入數(shù)字');
var result=a>2;
字符串和數(shù)字不具有大小的可比性
console.log(result);
?比較運(yùn)算的時(shí)候肯污,左右兩邊只要有一個(gè)數(shù)字。另一個(gè)也會(huì)轉(zhuǎn)成數(shù)字進(jìn)行比較
var a='5';
var b='20';
console.log(a>b);
這兩個(gè)時(shí)字符串的比較吨枉,沒(méi)有一個(gè)時(shí)數(shù)字蹦渣,所以不能隱式轉(zhuǎn)換
如果字符串轉(zhuǎn)成數(shù)字成了NaN
1.NaN和任何數(shù)字都沒(méi)辦法比較大小跟任何數(shù)字進(jìn)行任何比較都是false
2.NaN自己也不等于自己
3.NaN的類型是數(shù)字
var a = '文字';
var b = 2;
// console.log(a==b); // 文字也轉(zhuǎn)成數(shù)字了,只不過(guò)是NaN
隱形轉(zhuǎn)換:
? ? ? ? 1.字符串拼接時(shí):如果+左右兩邊有一個(gè)字符串貌亭,另一個(gè)也會(huì)轉(zhuǎn)成字符串
? ? ? ? 2.數(shù)學(xué)運(yùn)算時(shí):非+法的數(shù)學(xué)運(yùn)算柬唯,左右兩邊有一個(gè)字符串 會(huì)將符號(hào)左右兩邊的數(shù)據(jù)轉(zhuǎn)成數(shù)字
? ? ? ? 3.比較運(yùn)算時(shí):如果比較的兩個(gè)數(shù)據(jù)有一個(gè)是數(shù)字,另一個(gè)也會(huì)轉(zhuǎn)成數(shù)字
? ? ? ? 4.將數(shù)據(jù)放在分支結(jié)構(gòu)的小括號(hào)中圃庭,會(huì)轉(zhuǎn)成布爾值
document.write('加粗<br>這里有字</br>');
想在文本上輸出標(biāo)簽锄奢,使用document.write();來(lái)輸出,并且將這個(gè)標(biāo)簽當(dāng)作一個(gè)字符串
while 語(yǔ)法來(lái)事項(xiàng)循環(huán)
語(yǔ)法:
while(條件){
? ? 要重復(fù)執(zhí)行的 代碼段
}
例:
var a=1;
while (a<=10){
? ? document.write("從頭開(kāi)始學(xué)了" +"<br>");
? ? a++;每次執(zhí)行后讓計(jì)數(shù)器+1邏輯
}
do while
語(yǔ)法:
? ? do{
? ? ? ? 代碼段-首先執(zhí)行一次剧腻,在進(jìn)行while
? ? }while(條件)
先執(zhí)行一次拘央,執(zhí)行以后,就和while的流程一樣了
(不管條件成不成立?都會(huì)執(zhí)行一次)
for循環(huán)
for 語(yǔ)法:
三要素? 1.變量的初始值
? ? ? ? ? ? ?2.條件
? ? ? ? ? ? 3.變量的變化
?for(三要素){
}
例:
通過(guò)for循環(huán)來(lái)輸出 1~5
?for(var a=1;a<=5;a++){
? ? document.write('單身');
? ? document.write('<br>');
}
break; // 停止循環(huán)
continue;// 跳過(guò)當(dāng)前循環(huán) 到下一個(gè)循環(huán)
循環(huán)嵌套
就是在往循環(huán)里在寫一次循環(huán)
注意 :例外層循環(huán)變量不一樣
例:
九九乘法表
?for(var i=1;i<=9;i++){
? ? for(var a=1;a<=i;a++){
? ? ? ? document.write(a+"*"+i+"="+a*i+" ")
? ? }document.write("<br>")
}
函數(shù)
函數(shù) 函數(shù)是我的一個(gè)數(shù)據(jù)類型
?函數(shù)的作用就是把一段功能性的代碼放到一個(gè)空間里? ? 拿出來(lái)就可以用
1.申明式函數(shù)
語(yǔ)法:function 名字(){
}
注意:
? ? ? ? 1.在聲明式中只有在調(diào)用的這個(gè)函數(shù)的時(shí)候书在,里面的代碼才會(huì)執(zhí)行
function :就是一個(gè)生命函數(shù)的關(guān)鍵字
名字:就是給這段空間自定義一個(gè)名字?
():存放參數(shù)的位置
? ?{}:要存放的代碼
function fn(){
? ? console.log("聲明式")
}
2.賦值式
語(yǔ)法:var 名字 = function(){
}
var:定義變量的關(guān)鍵字
名字:就是給這個(gè)函數(shù)定義的名字
():存放參數(shù)的位置
{}:要存放的代碼
var fun = function(){
? ? console.log("這是賦值式")
}
函數(shù)的調(diào)用
? ? 1.直接調(diào)用
? ? 如實(shí)讓這個(gè)函數(shù)內(nèi)部的代碼執(zhí)行
? ? 直接寫? ----》函數(shù)名()
? ? ():? 就是調(diào)用的意思
? ? 2.依賴行為調(diào)用?
? ? ? ? 在一個(gè)頁(yè)面里面
調(diào)用時(shí)機(jī)上的區(qū)別
當(dāng)調(diào)用一個(gè)函數(shù)的時(shí)候 方式都是一樣的 但是調(diào)用的事件灰伟,取決使用哪種方式定義函數(shù)?
申明式函數(shù)(function()fn {})
可以在申明之情調(diào)用 ,也可以在聲明之后盜用
賦值式函數(shù)? (var fun )
只能在申明之后調(diào)用? ? 如果在生命聲明之前調(diào)用的話是is not a function
申明的不是一個(gè)函數(shù)
函數(shù)的參數(shù)
1.形參
就是寫在函數(shù)定義時(shí)候的()里面的
可以寫對(duì)個(gè)蕊温,多個(gè)的時(shí)候中間使用逗號(hào)(袱箱,)分隔
就是一個(gè)只用在函數(shù)內(nèi)部使用的變量
2.實(shí)參
就是寫在函數(shù)調(diào)用的時(shí)候的()里面的
可以寫對(duì)個(gè),多個(gè)的時(shí)候中間使用逗號(hào)(义矛,)分隔
是一個(gè)準(zhǔn)確的數(shù)據(jù)
用來(lái)給對(duì)應(yīng)的新參賦值的
參數(shù)的個(gè)數(shù)
1.新參和實(shí)參一樣多
? ? 按照從左到右 一一進(jìn)行賦值
2.形參比實(shí)參多
? ? 前面一一對(duì)應(yīng)? 后面都出來(lái)的形參沒(méi)有實(shí)參賦值?
? ? 在函數(shù)內(nèi)部調(diào)用的時(shí)候 就是一個(gè)沒(méi)有賦值的變量? 就是undefind
3.實(shí)參比形參多
? ? 前面的一一對(duì)應(yīng)? 后面多出來(lái)的就 沒(méi)有形參接受
arguments
函數(shù)內(nèi)部的一個(gè)特殊的變量 arguments
在每一個(gè)函數(shù)內(nèi)部? 都有一個(gè)天生的變量
不需要我們的定義? 直接用就行
arguments? 表示所有實(shí)參的集合
arguments: 會(huì)把所有的實(shí)參按照從左到右的順序依次排序
給每一個(gè)實(shí)參一個(gè)編號(hào) (索引/下標(biāo))
這個(gè)編號(hào)(索引/下標(biāo))是從0開(kāi)始的 依次遞增
arguments[編號(hào)]? 這樣就可以的到一個(gè)準(zhǔn)確的值
arguments還有一個(gè)屬性 交length
表示arguments 這個(gè)集合的長(zhǎng)度 发笔,也就是這里面有多個(gè)數(shù)據(jù)
值是一個(gè)number 數(shù)據(jù)類型的數(shù)字
如果要得到這個(gè)屬性就寫arguments.length
function fn(){
? ? console.log(arguments)
? ? console.log(arguments.length)//得到數(shù)據(jù)的個(gè)數(shù)
? ? console.log(arguments[2])//這樣就拿到了下標(biāo)為2的值
}
fn(100,200,300)
使用循環(huán)遍歷真?zhèn)€arguments 獲得到每一個(gè)數(shù)據(jù)
因?yàn)閍rguments的所索引(下標(biāo))是按照從0開(kāi)始的
可以使用循環(huán)的方式來(lái)遍歷 arguments
函數(shù)的返回值
返回值:也就是一個(gè)函數(shù)的結(jié)果
在函數(shù)里面添加返回值使用return關(guān)鍵字
return 就是在函數(shù)里面使用的
返回關(guān)鍵字
作用:
? ? 1.作為函數(shù)的返回值使用
? ? 2.打斷函數(shù)不在繼續(xù)執(zhí)行
? ? 當(dāng)函數(shù)內(nèi)部的代碼 使用 return關(guān)鍵字以后? return后面的代碼就不執(zhí)行了 直接結(jié)束函數(shù)
? ? break 是結(jié)束循環(huán)的關(guān)鍵字
? ? return 是結(jié)束函數(shù)的關(guān)鍵字
function fn(){
? ? console.log("第一行大媽");
? ? console.log("第一行大媽");
? ? return;
? ? //后面的代碼就不在執(zhí)行了
? ? console.log("第一行大媽");
? ? console.log("第一行大媽");
}
fn()
預(yù)解析
預(yù)解析? ? ?就是js的執(zhí)行過(guò)程
什么是預(yù)解析?
? ? 預(yù):在所有js 代碼執(zhí)行之前
? ? 解析:對(duì)整篇js代碼進(jìn)行通讀并解釋(瀏覽器在解析)
解析了什么內(nèi)容(只有兩種內(nèi)容)
? ? 1.var 聲明的變量
? ? ? ? var num
? ? 2.聲明式函數(shù)(不是賦值式函數(shù))
? ? function fn(){}
怎么解析的
1.var 聲明的變量
? ? 在所有js代碼執(zhí)行之前 先把變量聲明好
? ? 在開(kāi)始執(zhí)行代碼
2.申明式函數(shù)
? ? 在所有js 代碼執(zhí)行之前 先把函數(shù)名申明好 ,
? ? 并且給這個(gè)函數(shù)名賦值為一個(gè)函數(shù)凉翻,在開(kāi)始執(zhí)行代碼
申明式函數(shù)
function fn(){}
預(yù)解析這個(gè)代碼
1.與解析的過(guò)程
告訴瀏覽器了讨,fn是一個(gè)可以使用的名字
并且fn 這個(gè)名字是一個(gè)函數(shù)
賦值式 函數(shù)的與解析
? ? 賦值式函數(shù)不會(huì)按照申明式函數(shù)的與解析進(jìn)行
? ? 而是按照var的與解析規(guī)則進(jìn)行
? ? var fn = function(){}
//fn() // fn is not a function
var fn = function (){
? ? console.log('我是 fn 函數(shù)')
}
fn()? //在這里調(diào)用就可以答應(yīng)出來(lái) 也就是賦值式不可以上下都用? 但是申明式 就可以
預(yù)解析無(wú)節(jié)操
? ? 1.不管if條件是不是成立? 寫在{}里面的代碼都會(huì)進(jìn)行預(yù)解析
? ? 只是條件不成立的時(shí)候 ,不會(huì)執(zhí)行{}里面的賦值操作
? ? 2.當(dāng)在函數(shù)內(nèi)部的時(shí)候 ,return 后面的代碼雖然不會(huì)執(zhí)行但是會(huì)進(jìn)行預(yù)解析
預(yù)解析的優(yōu)先級(jí)
? ? 當(dāng)定義一個(gè)變量好一個(gè)申明式函數(shù)的時(shí)候
? ? 如果變量名和函數(shù)名沖名? 在預(yù)解析的時(shí)候 以函數(shù)為準(zhǔn)
作用域
? ? 一個(gè)東西可以生效的范圍
? ? 東西就是變量(變量名前计,函數(shù)名)
? ? 既是一個(gè)變量可以生效的范圍
作用域分類
? ? 兩類:
? ? 1.全局作用域
? ? 一個(gè)html 就是一個(gè)全局作用域
? ? 打開(kāi)頁(yè)面的時(shí)候胞谭,作用域就生成了 直到關(guān)閉頁(yè)面為止
? ? 2.局部作用域(私有作用域)
? ? 只有函數(shù)生成局部作用域
? ? 每一個(gè)函數(shù)就是一個(gè)私有作用域
作用域的上下級(jí)關(guān)系
? ? 全局作用域最大,所有的私有作用域都是在全局作用域下的
? ? 函數(shù)生成的私有作用域 函數(shù)寫在哪個(gè)作用域里面就是哪個(gè)作用域的子集
//這個(gè)位置就是全局作用域
function fn(){
//這個(gè)位置就是全局作用域的一個(gè)叫fn的子集作用域
? ? function? fun() {
? ? ? ? //這個(gè)位置就是全局作用域下的fn 私有作用域下的 fun私有作用域?
? ? }
}
作用域的規(guī)則
1.定義
有 var關(guān)鍵字
或者 function 函數(shù)名(){}
var num? ? ? ? ? ? //定義變量
function fn() {}? ? //定義變量
2.使用
當(dāng)需要拿到一個(gè)變量的值去使用的時(shí)候
console.log(num)? //使用num 的值 打印出來(lái)
1+num? ? ? ? //使用num 的值 去加1
var abd = bun //使用num 的值 賦值給ABC
3.賦值
個(gè)一個(gè)變量進(jìn)行賦值的操作
num =100;? ? ? //把100賦值給num
num = function (){}? ? //要把函數(shù)這個(gè)值 賦給num這個(gè)變量
變量定義規(guī)則?
? ? 當(dāng)定義一個(gè)變量的時(shí)候
? ? 把這個(gè)變量定義在哪個(gè)作用域里面
? ? 就只有這個(gè)作用域及其后代作用域才可以使用
? ? 當(dāng)前作用域的所有祖先記作用域不能使用
變量的使用規(guī)則
當(dāng)需要使用一個(gè)變量的時(shí)候
先在自己作用域內(nèi)查找男杈,如果有就是直接使用 丈屹,停止查找
如果沒(méi)有 ,就去上一級(jí)作用域查找? 有就使用 伶棒,停止查找
如果還沒(méi)有 旺垒,就在去上一級(jí)查找直到全局 有就使用 沒(méi)有就undefinde
變量賦值規(guī)則
當(dāng)需要給一個(gè)變量賦值的時(shí)候
先在自己的作用域內(nèi)部查找? 如果有? 就給自己作用域的變量賦值
如果沒(méi)有 ,就向上一級(jí)查找 肤无,如果有就給父級(jí)的變量賦值
如果還沒(méi)有 先蒋,就繼續(xù)向上查找
直到全局作用域都沒(méi)有? 那么就把這個(gè)變量定義為全局變量 ,在進(jìn)行賦值
對(duì)象數(shù)據(jù)類型
? ? 對(duì)象(object):是復(fù)雜數(shù)據(jù)類型的一種
? ? 對(duì)象里面是存貯數(shù)據(jù)的
如何創(chuàng)建一個(gè)空對(duì)象
? ? 1.字面量形式創(chuàng)建對(duì)象
? ? var obj = {}
? ? 2.內(nèi)置構(gòu)造函數(shù)創(chuàng)建對(duì)象
? ? var obj = new obj()
兩種區(qū)別
1. 字面量創(chuàng)建
可以在創(chuàng)建的時(shí)候直接存放一些數(shù)據(jù)放在對(duì)象空間內(nèi)
也可以在后期使用代碼里面添加或刪除
直接在{}里面書寫
? 要起得名 : 內(nèi)容? ? ? ?鍵值對(duì)
? 多個(gè)時(shí) 用逗號(hào)分開(kāi)
2.內(nèi)置構(gòu)造函數(shù)
目前只能在后期用代碼的形式往里添加
//創(chuàng)建一個(gè)空對(duì)象 對(duì)象空間起名為obj 直接創(chuàng)建
var obj = {}
console.log(obj)
//內(nèi)置構(gòu)造函數(shù)? 通過(guò)new 創(chuàng)建
var obj = new Object()
console.log(obj)
操作對(duì)象
就是對(duì)對(duì)象空間內(nèi)部的數(shù)據(jù)進(jìn)行增刪改查
? ? ? ? ? 增: 向?qū)ο罂臻g里面存儲(chǔ)一個(gè)數(shù)據(jù)
? ? ? ? ? ? 語(yǔ)法: 對(duì)象名.你自己起的名字 = 你要存儲(chǔ)的值
? ? ? ? ? 刪: 刪除對(duì)象空間里面的某一個(gè)數(shù)據(jù)
? ? ? ? ? ? 語(yǔ)法: delete 對(duì)象名.你要?jiǎng)h除的數(shù)據(jù)的名字
? ? ? ? ? 改: 修改對(duì)象空間里面的某一個(gè)數(shù)據(jù)
? ? ? ? ? ? 語(yǔ)法: 對(duì)象名.你要修改的名字 = 你要修改的值
? ? ? ? ? 查: 獲取對(duì)象空間里面某一個(gè)數(shù)據(jù)
? ? ? ? ? ? 語(yǔ)法: 對(duì)象名.你要查詢的數(shù)據(jù)的名字
? ? ? ? ? ? 找不到的時(shí)候, 就是 undefined
例:
var tun={
? ? ? ? name:"豚豚",
? ? ? ? age:"24",
? ? ? ? sex:"女",
? ? ? ? work:"yes",
? ? ? ? bf:{
? ? ? ? ? ? name:"老秦",
? ? ? ? ? ? age:23,
? ? ? ? ? ? dag:"奶球,八寶"
? ? ? ? }
}
//增
tun.money=200000;
//刪
delete tun.work;
//改
tun.money=10000;
//查
console.log(tun.bf);
//打印 tun?
console.log(tun);