數(shù)據(jù)類型

變量

  1. 聲明變量
var count;
var amount,level;
var count = 0, amount = 100;
  1. 命名變量

    1. 區(qū)分大小寫的語言
    • 第一個字符是字母或下劃線_,數(shù)字不能作為第一個字符
    • 字符必須是字母忆肾,數(shù)字或者下滑線
    • 變量名不得為保留字
    1. 需要聲明并初始化變量,可以為變量分配null值

    2. 聲明了變量但是不為其賦值。該值為undefined傲隶。

    var current;
    consoloe.log(current)  //underfined
    
  • null與0的行為類似,而underfined行為與NaN類似,null與undefined值他們相等声滥。
    var current;  //undefined
    var a = null;
    console.log( current == a);  //true
    console.log( current === a) //false
    
    1. 可以不使用var關(guān)鍵字聲明一個變量,為隱式聲明
    noString = 'abc';
    
    1. 不能使用從未聲明過的變量
    var area = length * width;    //width is not defined
    
    注:underfined 是聲明未定義侦香,is not defined 是使用了從未聲明過的變量

數(shù)據(jù)類型

js中有5種基本數(shù)據(jù)類型:undefined落塑,Null,Boolean,Number,String罐韩。還有一個復(fù)雜的數(shù)據(jù)類型 object

typeof操作符

undefined -- 這個值未定義
boolean -- 布爾值
string -- 字符串
number -- 數(shù)字
object -- 對象或者null
function -- 函數(shù)

是一個操作符而不是一個函數(shù)

var message = 'some';
console.log(typeof message);
console.log(typeof(message));
兩者方式都可以

undefined 類型

使用var聲明變量但是未對其加以初始化憾赁,就為underfined

var message;
console.log(message);   //undefined
console.log(typeof message);  //undefined
var message;
console.log(typeof message);  //undefined
console.log(typeof a);   //undefined
console.log(a);  // a is not defined 

typeof 給未初始化的變量和未聲明的變量都返回了undefined的值

null類型

var car = null;
console.log(car); // null
console.log( typeof car);   //object

undefined值是派生自null值,只要保存對象散吵,應(yīng)該明確讓變量保存null值龙考,體現(xiàn)null作為空指針,也有助于區(qū)分null和undefined的區(qū)別

console.log(null == undefined); true

Boolean類型

var found = true;
var lost = false;  
//區(qū)分大小寫矾睦,True晦款,F(xiàn)alse只是一個標(biāo)識符

其他數(shù)據(jù)轉(zhuǎn)為boolean值

數(shù)據(jù)類型 true false
string 任何非空的字符串 ""(空字符串)
number 任何非零數(shù)字值 0和NaN
object 任何對象 null
undefined 不適用 undefined
var message = 'hello world';
if (message){   //參照上表對字符串進行布爾值的轉(zhuǎn)化
    alert('true')
}

Number類型

  • 最基本的字面格式是十進制 var num = 55;
  • 還可以通過八進制或十六進制表示,八進制必須以0為開頭枚冗,數(shù)字序列(0~7)
    1. var num1 = 070; 有效56
    2. var num2 = 079; 無效解析為79
    3. 八進制在嚴(yán)格模式是拋出錯誤
  • 十六進制前兩位必須是0X缓溅,后跟數(shù)字(09及AF)。A~F可以大寫可以小寫赁温。
    1. var num1 = 0xA; 10;

在算數(shù)計算中坛怪,所有的八進制和十六進制都最終轉(zhuǎn)化成十進制淤齐。

浮點數(shù)

  • 幾種形式
var floatnum1 = 1.1;
var floatnum2 = .1; //有效,但是不推薦
  • 浮點數(shù)值的內(nèi)存空間是整數(shù)數(shù)值的兩倍袜匿。js會把浮點數(shù)值不失時機的轉(zhuǎn)化為整數(shù)值更啄。
  • e的用法 小數(shù)點后有6個零以上的浮點數(shù)值轉(zhuǎn)化為e的表示法
var floatnum1 = 3.125e7; //等于31250000
var floatnum2 = 3e-7; // 等于0.0000003
var num = 3.12e7;
console.log(num);     // 3125000
var num2 = 0.000000000008;    
console.log(num2)     //8e-12
  • 浮點數(shù)值的最高精度是17位小數(shù)。0.1加0.2結(jié)果是0.30000000000000004沉帮。
console.log(0.300000.toFixed(1))  // 0.3
var s = 0.300000.toFixed(1);
console.log( typeof s);   // string

數(shù)字的范圍

  • 由于內(nèi)存的問題锈死,js能夠保存的最小數(shù)字是5e-324;最大的數(shù)字是1.7976931348623157e308穆壕;如果超出的話待牵,則換成Infinity(-Infinity)。如果超出的話是不能參與計算喇勋∮Ц茫可以用isFinite()判斷數(shù)字是否位于最小和最大的數(shù)值之間
var result = 900;
console.log(isFinite(result))  // true
var result2 = Number.MAX_VALUE + Number.MIN_VALUE;  //表達(dá)最大和最小值
console.log(isFinite(result2));  // true
var result3 = Number.MAX_VALUE + Number.MAX_VALUE;  //表達(dá)最大和最小值
console.log(isFinite(result3))  //false
console.log(isFinite(result2));
if ( Number.MAX_VALUE > Number.POSITIVE_INFINITY){
    console.log('大于')
}else{
    console.log('小于')   // Number.MAX_VALUE 并沒有達(dá)到無窮大
}
var num = Number.MAX_VALUE + Number.MAX_VALUE;
if (  num > Number.POSITIVE_INFINITY){
    console.log('大于')
}else{
    console.log('小于')   // 無窮大與無窮大并不能做比較
}

NaN

  • 非數(shù)值的數(shù)值。在其他的語言中任何數(shù)除以0川背,報錯贰拿,js中返回NaN。
  • 任何涉及到NaN的操作返回都是NaN
  • NaN與任何數(shù)都不相等熄云,包括NaN本身膨更。
alert(NaN == NaN) // false
  • isNaN()接收到一個值,會嘗試將這個值轉(zhuǎn)化成數(shù)值缴允。任何不能被轉(zhuǎn)換為數(shù)字的值會返回ture荚守;
console.log(iaNaN(NaN));  // true
console.log(isNaN('blue'));  // true
console.log(isNaN('1.32元'))  // true 內(nèi)部通過valueOf()函數(shù)轉(zhuǎn)化
console.log(isNaN(10))  //false
console.log(isNaN(ture)) // false
  • isNaN();會首先調(diào)用valueOf()方法,確定返回值是否可以轉(zhuǎn)換练般,如果不能矗漾,基于這個返回值調(diào)用toString(),在測試返回值。

數(shù)值的轉(zhuǎn)換

有3個函數(shù)運用于數(shù)值的轉(zhuǎn)換:Number(),parseInt(),parseFloat();Number()可以運用于任何數(shù)據(jù)的類型薄料,parseInt(),parseFloat()專門運用于將字符串變?yōu)閿?shù)值敞贡。

Number();
  • 可以運用于任何的數(shù)據(jù)類型
  • 如果是Boolean值,true轉(zhuǎn)化為1摄职,false值轉(zhuǎn)為0誊役;
  • 數(shù)字值只是簡單的傳入
  • null值,返回的是0
var a = null;
console.log(Number(a)) // 0
  • undefined,返回為NaN谷市。
var a ;
console.log(Number(a)) // NaN
  • 字符串的話
var a = '123';
console.log(Number(a)) // 123
var a = '0123214';
console.log(Number(a))  // 123214  去掉開頭的0
var a = '1.234';
console.log(Number(a))  // 1.234
var a = '0xf';
console.log(Number(a))  // 15十六進制的轉(zhuǎn)化為十進制
var a = '070';
console.log(Number(a))  // 70在這里八進制不能轉(zhuǎn)化為十進制
var a = '';
console.log(Number(a))  // 0
var a = '   80';
console.log(Number(a))  // 80前面的空的字符串忽略
var a = '1.23元';
console.log(Number(a))  // NaN
// 除此之外的任何形式都是NaN
  • 如果是對象势木,則先調(diào)用valueOf(),然后再調(diào)用toString()。后再按照前面的方法返回字符串的值歌懒;

parseInt()

  • 忽略字符串前面的空格,一直找到第一個非空格的字符溯壶。如果第一個字符不是數(shù)字或者負(fù)號的話則返回NaN及皂。然后解析后面的字符甫男,直到遇到了一個非數(shù)字的字符
var a = 'fasd12314';
console.log(parseInt(a))  //  NaN
var a = '';
console.log(parseInt(a))  // NaN
var a = '1234blue';
console.log(parseInt(a))  // 1234
var a = '123.89';
console.log(parseInt(a))  // 123  . 是一個非數(shù)字的字符
var a = '0000231';
console.log(parseInt(a))  // 231
  • 在ES3中可以識別八進制的數(shù)值進行轉(zhuǎn)換為十進制,但是在ES5中不能識別验烧,因此可以寫成parseInt('a',8)或者parseInt('a',16);
console.log(parseInt('0xaf',16))   // 175
console.log(parseInt('af',16))   // 175
console.log(parseInt('af'))      // NaN
console.log(parseInt('070',8))   // 56

parseFloat()

  • 與parseInt()類似板驳,但是遇見一個無效的數(shù)字字符為止。第一個小數(shù)點有效碍拆,第二個小數(shù)點無效
var a = 22.34.5
console.log(parseFloat(a))  // 22.34
  • 十六進制的字符串始終會被轉(zhuǎn)為0
var a = '0xa';
console.log(parseFloat(a)) // 0
  • 只解析十進制的值若治,沒有第二個參數(shù)指定參數(shù)的用法
var a = '0xa';
console.log(parseFloat(a,16));  // 0
  • 如果字符串是一個可以解析為整數(shù)的書(沒有小數(shù),或者小數(shù)點后面都是零)感混,parseFloat()會返回一個整數(shù)端幼。
console.log(parseFloat('1234ble')) // 1234
console.log(parseFloat('0xa'))     // 0
console.log(parseFloat('22.5'))    // 22.5
console.log(parseFloat('22.34.5'))  // 22.5
console.log(parseFloat('009765.8'))  // 9765.8
console.log(parseFloat('3.125e7'))   // 31250000

toFixed()

var s = 123.090;
console.log(s.toFixed(1));               // 123.1  四舍五入
var s = 123.000;
console.log(s.toFixed(1));               // 123.0
console.log(typeof s.toFixed(1))     //string

String類型

  • 字符的字面量 p33
字面量 含義
\n 換行
\t 制表
\b 空格
' 單引號'
" 雙引號"

轉(zhuǎn)義字符只表示一個字符

var text = "this is this letter sigma: \u03a3."
console.log(text.length);  // 29
  • 字符串的特點

    • 字符串是不可變的,要改變變量保存的字符串弧满,首先要銷毀原來的字符串婆跑,然后再用一個新值的字符串填充變量
    var lang = 'java';
    lang = lang + 'script';
    

轉(zhuǎn)化為字符串

toString()方法
  • 返回相應(yīng)值的字符串表現(xiàn)。數(shù)值庭呜,布爾值滑进,對象和字符串都有toString方法,但是null和undefined沒有
var num = 10; 
console.log(num.toString());   // 10
var on = true;
console.log(on.toString());    // true
var boo = false;
console.log(boo.toString())    // false
var now = new Date();
console.log(now.toString());   // Tue Jul 04 2017 22:02:45 GMT+0800
var arr = [1,2,3,4];
console.log(arr.toString());   // 1,2,3,4
var a;
console.log(a.toString());    // 報錯
var b = null;
console.log(b.toString())     // 報錯

  • 傳遞參數(shù)募谎,輸出數(shù)值的基數(shù)扶关,可以輸出以二進制,八進制数冬,十六進制节槐,以及其他任意的有效進制格式的字符串。
var num = 10; 
console.log(num.toString())   //'10'
console.log(num.toString(2))   //'1010'
console.log(num.toString(8))   //'12'
console.log(num.toString(10))   //'10'
console.log(num.toString(16))   //'a'
String()能將任意的類型轉(zhuǎn)為字符串
  • 如果有toString()方法吉执,調(diào)用該方法后返回相對應(yīng)的結(jié)果
  • 如果是null疯淫,則返回null
  • 如果是undefined,則返回undefined戳玫。
var value1 = 10;
console.log(String(value1))  // '10'
var value2 = true;
console.log(String(value2))  // 'true'
var value3 = null;
console.log(String(value3))  // 'null'
var value4;
console.log(String(value4))  // 'undefined'

Object 類型

  • 對象是一組數(shù)據(jù)和功能的集合熙掺。對象可以通過執(zhí)行new創(chuàng)建
var o = new Object();
  • 在js中創(chuàng)建實例并沒有什么用處,Object類型是所有的實例基礎(chǔ)咕宿。Object類型所具有的任何屬性和方法也同樣存在于更具體的對象中币绩。
    所有的Object類型都有下面的屬性和方法
    • constructor : 保存著用于創(chuàng)建當(dāng)前對象的函數(shù)
    • hasOwnProperty : 用于檢查給定的屬性在當(dāng)前的對象實例中(而不是在實例原型)是否存在,如: o.hasOwnProperty('name');
    • isPrototypeOf(Object) : 用于檢查傳入的對象是否是傳入對象的原型中
    • propertyIsEnumerable(name) : 檢查給定的屬性是否能夠使用for-in語句
    • toLocalString() : 返回對象的字符串表示府阀,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)
    • toString() : 返回對象的字符串表示
    • valueOf() : 返回對象的字符串缆镣,數(shù)值,布爾值表示试浙,通常與toString()方法返回值相同

操作符

一元操作符:只能操作一個值的操作符

  1. 遞增和遞減操作符(++,--)
    前置性和后置型
    前置遞增和遞減董瞻,變量的值都是在語句被求值以前改變的。
var age = 27;
console.log(++age); // 28

var age2 = 27;
console.log(age++)  // 27

var num1 = 2;
var num2 = 20; 
var num3 = -- num1 + num2;  //21
var num4 = num1 + num2;     // 21

var num1 = 2;
var num2 = 20;
var num3 = num1-- + num2;   // 22
var num4 = num1 + num2;     // 21

這四個操作符對任何值都適用

var s = '2';
console.log(++s) //3
console.log(typeof s)  // number
var s2 = 'z';
console.log(++s2) // NaN 
//字符串將值轉(zhuǎn)換為數(shù)字再進行操作

var boo = false;
console.log(++boo)  // 1

var f = 1.1;
console.log(--f)  // 0.1000000000000009

var o = {
    valueOf : function(){
        return -1;
    }
}
console.log(--0)   // -2

//隱式類型轉(zhuǎn)換,上面的幾種類型都被轉(zhuǎn)換成了number類型

一元加和減操作符

“+”钠糊,“-”挟秤,該操作符像Number()對這個值進行轉(zhuǎn)換,而對象則會先調(diào)用他們的valueOf(),toString(),在求值抄伍。


```js
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1
var o = {
    valueOf : function(){
        return -1;
    }
}

-s1 // -1
-s2 // -1.1
-s3 // NaN
-b // 0
-f // -1.1
-o // 1
  • 主要運用于基本的算術(shù)運算艘刚,隱式轉(zhuǎn)化數(shù)據(jù)的類型

布爾操作符

  1. 邏輯非(!),非布爾值的類型先按照Boolean()函數(shù)轉(zhuǎn)換,后再取反截珍。

邏輯與(&&)

邏輯與操作不一定返回布爾值(同時為true時才返回true)攀甚,遵循以下操作

  • 第一個操作數(shù)是對象,則返回第二個操作數(shù)
  • 第二個操作數(shù)是對象岗喉,則只有在第一個操作數(shù)的求值結(jié)果為true才返回該對象
  • 兩個操作數(shù)都是對象秋度,則返回第二個操作數(shù)
  • 如果有一個操作數(shù)是null,則返回null
  • 如果有一個操作數(shù)是undefined沈堡,則返回undefined
  • 如果有一個操作數(shù)是NaN静陈,則返回NaN。
var found = 'yes';
var s = 'not';
console.log((found && s))   // not

var found = true
var s = [1,2,3];
console.log((found&&s))  // [1,2,3]

console.log('fasd'&&NaN)  //NaN

如果第一個數(shù)值是false诞丽,則只能返回false鲸拥,短路操作

var found = true;
console.log(found&&someundefined)   // 報錯

var found = false;
console.log((found&&someundefined)) // false

邏輯或(||)

邏輯或也不一定返回布爾值(有一個為true則為true),但是有一個不是布爾值僧免,也不一定返回布爾值刑赶。

var s = 'jfs';
console.log((s||'abc'))  // jfs 如果第一個是對象,則返回對象

console.log((false||NaN)) // NaN 如果第一求值是false懂衩,則返回第二個

console.log('adsf'||'123') // 如果都是對象則返回第一個

console.log(null||null)  // null
console.log(NaN||NaN)    //NaN
console.log(undefined|| undefined) // undefined

短路操作符撞叨,第一個操作符為true,就不對第二個數(shù)求值,利用這種方法浊洞,避免為變量賦值null或undefined

var found = true;
var result = (found || someundefined)  // true

乘性操作符

定義了3個乘性操作符:乘法牵敷,除法,求模法希。在操作數(shù)為非數(shù)值的情況下后臺會使用Number()轉(zhuǎn)化枷餐,是隱式類型轉(zhuǎn)換。

  1. 乘法
  • 乘積超過了js數(shù)值的范圍苫亦,返回Infinity或者-Infinity毛肋;
  • 一個數(shù)為NaN,結(jié)果為NaN屋剑;
  • Infinity與0相乘润匙,結(jié)果為NaN;
  • Infinity與非0相乘唉匾,結(jié)果為Infinity或者-Infinity孕讳;
  • Infinity與Infinity相乘,結(jié)果為Infinity;
  • 如果一個數(shù)不是數(shù)值厂财,后臺調(diào)用Number(),后按照上面的方法

除法

  • 商超過了js數(shù)值的范圍油啤,返回Infinity或者-Infinity;
  • 一個數(shù)為NaN蟀苛,結(jié)果為NaN;
  • Infinity除以Infinity逮诲,結(jié)果為NaN帜平;
  • 零被零相除,結(jié)果是NaN
  • Infinity與0相乘梅鹦,結(jié)果為NaN裆甩;
  • 非零的有限數(shù)被零除,結(jié)果是Infinity或者-Infinity
  • Infinity被任何非零的數(shù)值相除齐唆,結(jié)果是Infinity或者-Infinity嗤栓,符號取決于操作數(shù)的復(fù)合
  • 如果一個數(shù)不是數(shù)值,后臺調(diào)用Number(),后按照上面的方法

加法

  • 如果一個操作數(shù)是NaN,則結(jié)果是NaN
  • Infinity加Infinity箍邮,結(jié)果是Infinity茉帅;
  • -Infinity加-Infinity,結(jié)果是-Infinity锭弊;
  • Infinity加-Infinity堪澎,結(jié)果是NaN;
  • +0加+0味滞,結(jié)果是+0樱蛤;
  • -0加-0,結(jié)果是-0剑鞍;
  • +0加-0昨凡,結(jié)果是+0;
    不過一個操作數(shù)是字符串蚁署,那么就應(yīng)該如下規(guī)則
  • 兩個都是字符串便脊,則是兩個字符串拼接
  • 一個是字符串,則將另一個轉(zhuǎn)換為字符串形用,作為字符串的拼接
  • 一個是對象就轧,數(shù)值,布爾值田度,則調(diào)用他們的toString()方法取得字符串妒御,后拼接
var a ;
var b = null;
console.log(a+b); // NaN

var num1 = 5;
var num2 = 10;
var message = 'this sum is' + num1 + num2 // this sum is 510
var message2 = 'this sum is' + (num1+num2)//this sum is 15

減法

  • 兩個都是數(shù)值,常規(guī)數(shù)值運算
  • 一個操作數(shù)是NaN镇饺,則結(jié)果是NaN
  • Infinity減Infinity乎莉,結(jié)果是NaN
  • -Infinity減-Infinity,結(jié)果是NaN
  • Infinity減-Infinity,結(jié)果是Infinity
  • -Infinity減Infinity惋啃,結(jié)果是-Infinity
  • +0減+0哼鬓,結(jié)果是+0;
  • +0減-0边灭,結(jié)果是-0异希;
  • -0減-0,結(jié)果是+0绒瘦;
  • 其他字符串称簿,布爾值,null惰帽,undefined憨降,先在后臺調(diào)用Number()函數(shù)。
  • 如果是對象的話该酗,則先調(diào)用valueOf()授药,如果沒有則調(diào)用toString()

關(guān)系操作符(<,>,<=,>=)

  • 兩個都是數(shù)值,直接比較
  • 兩個都是字符串呜魄,則比較編碼
  • 一個是數(shù)值悔叽,則將另一個轉(zhuǎn)換成數(shù)值
  • 操作數(shù)是對象,則調(diào)用valueOf(),如果沒有valueOf(),則調(diào)用toString()
var result = '23' < '3' //true
var result = '23' < 3   //false
var result = 'a' < 3  // false ,'a'轉(zhuǎn)換成NaN耕赘,任何操作數(shù)與NaN比較骄蝇,結(jié)果都是false

相等操作符

  • 相等和不相等"=="和'!=',這兩個操作符都會先轉(zhuǎn)換操作數(shù)(強制轉(zhuǎn)換),然后再比較他們的相等性
    • 布爾值false => 0,true => 1;
    • 一個操作數(shù)是字符串操骡,另一是數(shù)值九火,比較時先將字符串變?yōu)閿?shù)值
    • 一個是對象,另一個不是册招,則調(diào)用valueOf(),得到基本值后進行比較
    • null 和undefined 相等
    • 在比較相等性之前岔激,不能將null和undefined轉(zhuǎn)換成任何值
    • 當(dāng)一個是NaN時,相等為false是掰,不相等為true虑鼎。即便是兩個都是NaN的情況下,NaN不和任何值相等键痛,也不和自己本身相等
    • 如果兩個都是對象炫彩,則比較他們是不是同一個對象,如果兩個操作數(shù)指向同一個對象則返回true絮短,否則返回false
null == undefined   // true  null 和 undefined 相等
'NaN' == NaN // false  NaN 與任何值都是false
NaN == NaN  // false 
NaN != NaN // true NaN自己和本身也不相等
false == 0  // true  false轉(zhuǎn)化Number()為0
true == 1  // true  true  Number()為1
undefined == 0  // false
null == 0    //  false 在比較相等性之前江兢,不能將null和undefined 轉(zhuǎn)化成任何值
'5' == 5 // true  字符串5變?yōu)閿?shù)值

全等和不全等("=="和"===")

除了在比較之前不轉(zhuǎn)換操作數(shù)之外,"=="和"==="沒有什么區(qū)別 "!="和"!=="

var result1 = ( '55'==55)  // true
var result2 = ( '55'===55) //false

null == undefined // true 
null === undefined // false

條件操作符

variable = boolean_expressin ? true_value : false_value;

var max = (num1 > num2) ? mun1 : mun2;  // 三目運算取兩者之間較大值

賦值操作符

var num = 10;

num = num + 10 => num += 10
// *= , /= , %= , += , -= , 

逗號操作符

  • 使用逗號可以在一條語句中執(zhí)行多個操作
var num1 = 1, num2 = 2, num3 = 3;
  • 用于賦值丁频,逗號操作符總返回表達(dá)式的最后一項
var num = (5,1,4,8)  // num 為8

語句

if 語句

if (i > 25){
    alert('i > 25')
}else if (i < 0){
    alert('i<0')
}else{
    alert('其他數(shù)值')
}

do-while 語句

var i = 0;
do {
    i += 2;
}while(i < 10)  
// 循環(huán)體中的代碼至少被執(zhí)行一次
var i = 12;
do {
    i += 2;
}while(i < 10)
console.log(i)  // 14

while 語句

在循環(huán)體的代碼執(zhí)行之前對條件做判斷杉允,循環(huán)體的代碼可能永遠(yuǎn)不會執(zhí)行

var i = 0; 
while(i < 10){
    i += 2
}
console.log(i)  // 10

for 語句

for 語句也是一種前測試循環(huán)語句邑贴,他具有執(zhí)行循環(huán)之前初始化變量和定義循環(huán)后要執(zhí)行的代碼能力
for ( initialization ; expression ; post-loop-expression ) statement

var count = 10;
for ( var i = 0; i < count; i ++){
    console.log(i)  // 0,1,2,3,4,5,6,7,8,9
}
// 功能一致
var count = 10; 
var i = 0;
while(i<count){
    console.log(i);
    i ++ ;
}

在for循環(huán)的變量初始化表達(dá)式中,也可以不使用var關(guān)鍵字

var count = 10;
var i ;
for (i=0; i < count; i ++){
    console.log(i)
}

js中不存在塊級作用域叔磷,因此在循環(huán)內(nèi)部定義的變量可以在外部訪問

for ( var i = 0; i < 10 ; i ++){
    console.log(i)   // 0,1,2,3,4,5,6,7,8,9
}
console.log(i)  // 10

for 語句中的初始化表達(dá)式拢驾,控制表達(dá)式,循環(huán)后的表達(dá)式都是可選的。將這三個表達(dá)式全部省略,則是一個無限循環(huán)

for (; ;){
    doSomething()  // 無限循環(huán)
}

給出一個控制表達(dá)式就是把for循環(huán)變成了while循環(huán)

var count = 10;
var i = 0;
for ( ; i < count;){
    console.log(i);
    i ++ ;
}

for-in 語句

用來枚舉對象的屬性

for (var proName in window){
    console.log(proName)  // var 操作符不是必須的,但是為了保證使用局部變量,推薦使用
}

for-in 輸出的屬性名順序不可預(yù)測捧弃,返回的先后順序可能會因為瀏覽器而異
如果迭代對象的變量值為null 或者 undefined for-in 語句會拋錯,但是ES5不再拋出錯誤,只是不執(zhí)行循環(huán)體

label 語句

給代碼中添加一個標(biāo)簽

break 和 continue 語句

break 語句會立即退出當(dāng)前循環(huán)矮烹,強制執(zhí)行循環(huán)后面的語句,continue 也是立即退出當(dāng)前循環(huán)褐啡,但是會從循環(huán)的頂部繼續(xù)執(zhí)行

var num = 0;
for ( var i = 1 ; i < 10 ; i ++){
    if ( i % 5 == 0){
        break
    }
    console.log(num)  // 4  直接跳出for的循環(huán)
}


var num = 0;
for ( var i = 1; i < 10 ; i ++){
    if ( i%5 == 0){
        continue
    }
    console.log(num)   // 8  跳出當(dāng)前循環(huán)語句诺舔,但是繼續(xù)在循環(huán)頂部執(zhí)行
}



var num = 0; 
outer:
for (var i = 0; i < 10 ; i ++){
    for ( var j = 0; j < 10 ; j ++){
        if ( i == 5 && j == 5){
            break;
        }
        num ++   
    }
}

// 最終num = 95; 當(dāng)i= 5备畦,j = 5 時只是跳出了j的循環(huán)低飒,從i= 6開始


var num = 0; 
outer:
for (var i = 0; i < 10 ; i ++){
    for ( var j = 0; j < 10 ; j ++){
        if ( i == 5 && j == 5){
            break outer;
        }
        num ++   
    }
}
// 最終num = 55; 當(dāng)i= 5懂盐,j = 5 時不但退出了j的循環(huán)褥赊,也退出了i的循環(huán)



var num = 0; 
outer:
for (var i = 0; i < 10 ; i ++){
    for ( var j = 0; j < 10 ; j ++){
        if ( i == 5 && j == 5){
            continue outer;
        }
        num ++   
    }
}
// 最終num = 99; 當(dāng)i= 5莉恼, j = 5 時拌喉,跳出j的循環(huán),從j= 6開始


var num = 0; 
outer:
for (var i = 0; i < 10 ; i ++){
    for ( var j = 0; j < 10 ; j ++){
        if ( i == 5 && j == 5){
            continue outer;
        }
        num ++   
    }
}
// 最終num = 95俐银; 當(dāng)i= 5尿背, j = 5 時,跳出j的循環(huán)捶惜,從i= 6的循環(huán)開始

with語句

主要作用就是將代碼的作用域設(shè)置到一個特定的對象中

var qs = location.search.substring(1);
var hostName = location.hostName;
var url = location.href;

// 可以改寫成如下

with(location){
    var qs = search.substring(1);
    var hostName = hostName;
    var url = host
}

switch 語句

switch(i){
    case 25:
        alert('25');
        break;
    case 35:
        alert('35');
        break;
    case 45:
        alert('45');
        break;
    default:
        alert('other');
}

如果省略break田藐,就會導(dǎo)致執(zhí)行完當(dāng)前的case,繼續(xù)執(zhí)行下個case
需要同時執(zhí)行多個case的話

switch(i){
    case 25:
        /*合并兩種情況*/
    case 35:
        alert('35 or 25');
        break;
    case 45:
        alert('45');
        break;
    default:
        alert('other');
}

case的值不一定是常量吱七,可以是變量汽久,可以是表達(dá)式,可以是字符串

switch('hello world'){  // 字符串
    case 'hello'+'world':   // 表達(dá)式
        alert('1');
        break;
    case 'good'
        alert('2');
        break;
    default :
        alert('888')
}
var num = 25;
switch(true){   // 每個case都可以返回一個布爾值
    case num < 0:
        alert('小于0');
        break;
    case num == 0 :  // 這個地方是判斷
        alert(0);
        break;
}

switch 使用的是全等操作符踊餐,所以'10'與10不相等

函數(shù)

  • 形式
function say(name , message){
    alert(name + message);
}
  • 函數(shù)在定義時不必指定是否返回值景醇,任何函數(shù)在任何時候都可以通過return語句后跟著要返回的值
  • 函數(shù)在執(zhí)行return語句之后停止并立即退出
  • return語句也可以不帶有任何返回值,這個時候返回undefined
  1. 參數(shù)
  • js函數(shù)內(nèi)部中市袖,參數(shù)是用一個數(shù)組來表示的啡直,所以并不關(guān)心數(shù)組中有哪些參數(shù)
  • 函數(shù)體內(nèi)可以通過arguments對象來訪問這個參數(shù)數(shù)組
function say(){
    alert(arguments[0]+ arguments[1]);
}
  • 命名形參只是提供了便利烁涌,但是不是必需的。
function doAdd(){
    if ( arguments.length == 1){
        alert(arguments[0]= 10)
    }else if ( arguments.length == 2){
        alert(arguments[0]+ arguments[1])
    }
}
  • arguments對象和命名參數(shù)一起使用
function doAdd(num1,num2){
    if (arguments.length == 0){
        console.log(num1+10)
    }else if (arguments.length == 2){
        console.log(num1+num2)
    }
}
  • arguments的值與形參一致
    var n1 = 10;
    var n2 = 20;
    doAdd(n1,n2);
    function doAdd(num1,num2){
        arguments[1] = 10;
        console.log(num2);   //10
        console.log(n2);     //20
    }
  • 沒有傳遞命名參數(shù)將被自動賦予undefined值
  • 嚴(yán)格模式下酒觅,如果沒有傳入num2,即使設(shè)置arguments[1]設(shè)為10撮执,num2 依然是undefined,重新修改arguments的值會導(dǎo)致錯誤(代碼將不會執(zhí)行)
  1. 沒有重載
function add(num){
    return num + 100;
}
function add(num){
    return num + 200;
}
add(100)  // 300  只有覆蓋舷丹,沒有重載
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抒钱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颜凯,更是在濱河造成了極大的恐慌谋币,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症概,死亡現(xiàn)場離奇詭異蕾额,居然都是意外死亡,警方通過查閱死者的電腦和手機彼城,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門诅蝶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人募壕,你說我怎么就攤上這事调炬。” “怎么了舱馅?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵缰泡,是天一觀的道長。 經(jīng)常有香客問我代嗤,道長棘钞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任干毅,我火速辦了婚禮武翎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溶锭。我一直安慰自己宝恶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布趴捅。 她就那樣靜靜地躺著垫毙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拱绑。 梳的紋絲不亂的頭發(fā)上综芥,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音猎拨,去河邊找鬼膀藐。 笑死屠阻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的额各。 我是一名探鬼主播国觉,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虾啦!你這毒婦竟也來了麻诀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤傲醉,失蹤者是張志新(化名)和其女友劉穎蝇闭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硬毕,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡呻引,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吐咳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苞七。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挪丢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卢厂,我是刑警寧澤乾蓬,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站慎恒,受9級特大地震影響任内,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜融柬,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一死嗦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粒氧,春花似錦越除、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饱苟,卻和暖如春孩擂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箱熬。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工类垦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狈邑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓蚤认,卻偏偏與公主長得像米苹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烙懦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容