最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

每日十條JavaScript經(jīng)驗(yàn)技巧(二)

 更新時(shí)間:2016年06月23日 09:08:36   作者:我是偶哦  
本文是每日十條JavaScript經(jīng)驗(yàn)技巧系列文章的第二篇,同樣給大家匯總介紹10條個(gè)人在項(xiàng)目中的一些經(jīng)驗(yàn),分享給大家,希望大家能夠喜歡

1. 非數(shù)值類型轉(zhuǎn)數(shù)值

使用Number()轉(zhuǎn)換時(shí):

  1. undefined會(huì)轉(zhuǎn)為NaN
  2. 如果字符串以0開(kāi)始,瀏覽器會(huì)忽略前導(dǎo)0,不會(huì)按照八進(jìn)制進(jìn)行轉(zhuǎn)換
  3. 如果字符串以0x開(kāi)始,瀏覽器會(huì)按照十六進(jìn)制轉(zhuǎn)化為十進(jìn)制返回
  4. 如果字符串有字符,除(+,-,.)外都會(huì)轉(zhuǎn)為NaN,十六進(jìn)制時(shí),字符串包含任何非數(shù)字字符都返回NaN
  5. 如果是對(duì)象轉(zhuǎn)換,則對(duì)象先使用valueof(),然后按照規(guī)則轉(zhuǎn)換。如果無(wú)valueOf方法,則調(diào)用toString方法,再轉(zhuǎn)換。

使用parseInt()轉(zhuǎn)換時(shí):

  1. parseInt會(huì)忽略前導(dǎo)空格,直到第一個(gè)非空字符開(kāi)始解析,如果為非數(shù)字或正負(fù)號(hào),則返回NaN。如果為數(shù)字則一直解析到第一個(gè)非數(shù)字為止。注:在parseInt中小數(shù)點(diǎn)不是有效的數(shù)字字符
  2. parseInt能識(shí)別十進(jìn)制,八進(jìn)制和十六進(jìn)制,但是在解析八進(jìn)制時(shí),ECMAScript 3 和ECMAScript 5存在分歧,ECMAScript 3會(huì)將070轉(zhuǎn)化為56,但是ECMAScript 5會(huì)轉(zhuǎn)換為70。
  3. 使用parseInt的第二個(gè)參數(shù)
  4. var num1 = parseInt("10",2);    //2 按二進(jìn)制解析
    var num2 = parseInt("10",8);    //8 按八進(jìn)制解析
    var num3 = parseInt("10",10);   //10 按十進(jìn)制解析
    var num4 = parseInt("10",16);   //16 按十六進(jìn)制解析
    
    

使用parseFloat()轉(zhuǎn)換時(shí):

parseFloat和parseInt的第一個(gè)區(qū)別在于它在解析字符串是是遇到一個(gè)無(wú)效的浮點(diǎn)數(shù)值字符為止,比parseInt多了.
解析十六進(jìn)制數(shù)值時(shí)返回0

var num = parseFloat("0xA");  //0
var num = parseInt("0xA");   //10

parseFloat函數(shù)沒(méi)有第二個(gè)可以指定基數(shù)的參數(shù),所以只解析十進(jìn)制值。
如果字符串是個(gè)整數(shù),則返回整數(shù)而不是浮點(diǎn)數(shù)
var num = parseFloat("2.125e7");  //31250000

2. 使用toString()輸出不同進(jìn)制的數(shù)值

此條適用于整數(shù),我們可以用toString()返回任意進(jìn)制的整數(shù)。

var num = 10;
alert(num.toString());  //"10"
alert(num.toString(9));  //"11"
alert(num.toString(16));  //"a"

3. 位操作符時(shí)注意NaN和Infinity

在對(duì)NaN和Infinity使用位操作符時(shí),這兩個(gè)數(shù)值都會(huì)被當(dāng)成0來(lái)處理。 如果對(duì)于非數(shù)值應(yīng)用位操作符,會(huì)先使用Number()函數(shù)將該值轉(zhuǎn)換為一個(gè)數(shù)值。

還有一點(diǎn)要注意的就是負(fù)數(shù)的無(wú)符號(hào)右移,無(wú)符號(hào)右移是以0來(lái)填充空位,而不像有符號(hào)右移以符號(hào)位填充空位,所以對(duì)正數(shù)的無(wú)符號(hào)右移和有符號(hào)右移結(jié)果相同,但對(duì)負(fù)數(shù)就不同了。無(wú)符號(hào)右移操作會(huì)把負(fù)數(shù)的二進(jìn)制碼當(dāng)成正數(shù)的二進(jìn)制碼,而且負(fù)數(shù)是以補(bǔ)碼形式表示,因此會(huì)導(dǎo)致無(wú)符號(hào)右移后的結(jié)果相差非常大。

var oldValue = -64;            
var newValue = oldValue >>> 5

4. 特殊的數(shù)值運(yùn)算

對(duì)于數(shù)值運(yùn)算,如果有一個(gè)操作數(shù)為NaN,則結(jié)果為NaN。
對(duì)非數(shù)值應(yīng)用使用一元加操作或減操作(+,-,正負(fù)號(hào)),如果該值無(wú)法轉(zhuǎn)換為數(shù)值(使用Number()方式轉(zhuǎn)換),則返回NaN。

var s1 = "01", s2 = "1.1", s3 = "z", b = false,
o = {
valueOf: function(){
 return -1;
}
};
s1 = +s1;  //1   +改為-:  -1
s2 = +s2;  //1.1       -1.1
s3 = +s3;  //NaN       NaN
b = +b;   //0        0
o = -o;  //-1        1

Infinity和0相乘等于NaN,和非0數(shù)相乘為Infinity和-Infinity,取決于乘數(shù)的正負(fù)號(hào)。Infinity和Infinity相乘等于Infinity。

var num1 =Infinity, num2 = 0, num3 = -2 ,num4 = -Infinity;
alert(num1 * num2);   //NaN
alert(num1 * num3);   //-Infinity
alert(num1 * num4);   //-Infinity

零除零為NaN,非零數(shù)除以零為Infinity或-Infinity。Infinity除以Infinity為NaN
對(duì)于取模運(yùn)算,下面等式成立:

Infinity%2=NaN;
2%-Infinity=2;
0%Infinity=0;    //只要被除數(shù)為0,除數(shù)不為NaN,結(jié)果都為0
Infinity%0=NaN;   //被除數(shù)可以為任意數(shù),除數(shù)只要為0,結(jié)果都為NaN
Infinity%Infinity=NaN

加法運(yùn)算:如果兩個(gè)操作數(shù)都是字符串則+變?yōu)樽址B接。如果一個(gè)為字符串,一個(gè)為數(shù)值,將數(shù)值轉(zhuǎn)換為字符串,然后連接字符串,如果一個(gè)操作數(shù)是對(duì)象,布爾值則先調(diào)用它們的valueOf方法,如無(wú),在調(diào)用toString方法。再根據(jù)返回值類型,判斷+號(hào)應(yīng)該連接字符串還是相加。

Infinity + -Infinity = NaN;

var p = {
  valueOf: function () {
    return -1;
  }
};
var num =1;
var result = num +p;
alert(result);          // 0 相加

var p = {
  valueOf: function () {
    return "not a num";
  }
};
var num =1;
var result = num +p;
alert(result);        //1not a num 字符串連接

減法運(yùn)算:減法運(yùn)算和加法運(yùn)算十分相似,關(guān)于對(duì)象的處理也是一樣,所以不再說(shuō)明。

Infinity - Infinity = NaN;
-Infinity - -Infinity = NaN;

5. 關(guān)系操作符的使用

關(guān)系操作符就是小于(<)、大于(>)、小于等于(<=)和大于等于(>=)

只要有一個(gè)數(shù)值,就會(huì)執(zhí)行數(shù)值比較,另一個(gè)不為數(shù)值,則轉(zhuǎn)為數(shù)值。對(duì)象先用valueOf,后用toString。其實(shí)對(duì)象無(wú)論執(zhí)行什么運(yùn)算都是這樣,有valueOf,則用valueOf返回值,否則使用toString返回值。
兩個(gè)都為字符串,則比較字符串的字符編碼值(ASCII值)
關(guān)于第一個(gè)還要注意,在一個(gè)時(shí)候字符串一個(gè)是數(shù)值時(shí),字符串無(wú)法轉(zhuǎn)數(shù)值時(shí),即為NaN會(huì)出現(xiàn)如下情況

var result = "a" < 3;  //false a轉(zhuǎn)換為NaN
var result = "a" >= 3;  //false 任何數(shù)和NaN進(jìn)行相比都為false

6. ==和===

在JavaScript中,如果等式兩邊類型不同,或者僅包含一個(gè)對(duì)象,那么比較會(huì)分為兩種情況,轉(zhuǎn)型后比較和不轉(zhuǎn)型直接比較。 ==是先轉(zhuǎn)換在比較,===是不轉(zhuǎn)換直接比較。 對(duì)于來(lái)說(shuō)===,只要類型不相等就返回false。 而對(duì)于==來(lái)說(shuō),分為如下幾種情況:

true會(huì)轉(zhuǎn)換為1,false會(huì)轉(zhuǎn)換為0。
字符串和數(shù)值比較,字符串會(huì)轉(zhuǎn)換為數(shù)值。
如果等式兩邊只有一個(gè)對(duì)象,這個(gè)對(duì)象會(huì)調(diào)用valueOf得到基本類型,如無(wú)valueOf方法調(diào)用toString方法。如果兩邊都是對(duì)象則不轉(zhuǎn)型。

var p = {
  "name":"a"
};
var q = {
  "name":"a"
}
var o =p;
alert(q==p);  //false  p和q指向的對(duì)象的地址不同,雖然對(duì)象的內(nèi)容是相同的
alert(o==p);  //true

下面是特殊的比較情況

null == undefined  //true
NaN != NaN     //true
NaN == NaN     //false
"NaN" == NaN    //false
undefined == 0   //false
null == 0      //false

7. for-in語(yǔ)句

for-in語(yǔ)句輸出順序不可預(yù)測(cè),次序可能因?yàn)闉g覽器不同而有所差異。
要迭代的變量未null或undefined時(shí),ECMAScript 5下不再拋出錯(cuò)誤而是不執(zhí)行循環(huán)體。如果想向前兼容,則在循環(huán)前判斷不為null或undefined。

8. swithc語(yǔ)句

switch可以使用任何數(shù)據(jù)類型。
case的值可以是常量,變量和表達(dá)式。
switch語(yǔ)句在比較值時(shí)使用的是全等比較操作符(===)。

var num = 25;
switch (true) {
 case num<0:
  alert("less 0");
  break;
 case num>=0:
  alert("more than 0");
  break;
 default:
  alert("error");

}

9 函數(shù)的使用

函數(shù)內(nèi)沒(méi)有return語(yǔ)句或return不帶任何返回值,則函數(shù)都會(huì)返回undefined。
函數(shù)的定義時(shí)和函數(shù)的調(diào)用時(shí)參數(shù)不比保持一致。換句話說(shuō)兩種參數(shù)(形參和實(shí)參)并沒(méi)有任何聯(lián)系。函數(shù)定義時(shí)提供的變量只是使用時(shí)較為方便,就算不定義也可以獲得傳遞給函數(shù)的參數(shù)(通過(guò)arguments[])。

function howManyArgs(){
 alert(arguments.length);
}
howManyArgs("a");     // 1
howManyArgs("a","b");   // 2
howManyArgs();      // 0

形參和arguments[]之間的關(guān)系如下,注意嚴(yán)格模式和非嚴(yán)格模式區(qū)別。

function howManyArgs(ss){
 arguments[0]="test";
 arguments[1]="test2"
 alert(arguments[0]);  //test
 alert(arguments[1]);  //test2
 alert(ss);       //test
}
howManyArgs("a");
function howManyArgs(ss){
"use strict"
arguments[0]="test";
arguments[1]="test2"
alert(arguments[0]);   //test
alert(arguments[1]);   //test2
alert(ss);        //a
}
howManyArgs("a");

10. 函數(shù)參數(shù)的使用

在定義函數(shù)時(shí),我們會(huì)把用到的參數(shù)寫(xiě)到函數(shù)的括號(hào)內(nèi),但是在有多個(gè)可選參數(shù)的情況下就會(huì)不夠靈活,這個(gè)時(shí)候可以使用對(duì)象封裝多個(gè)可選參數(shù)。

 function displayInfo(args){
  var output = "";
  if (typeof args.name == "string"){
   output += "Name: " + args.name + "\n";
  }
  if(typeof args.age == "number"){
   output += "Age: "args.age + "\n";
  }
  alert(output);
 }
 displayInfo({
  name: "Nicholas",
  age: 29
 });
 displayInfo({
  name: "Greg"
 });

相關(guān)文章

  • JavaScript的代碼編寫(xiě)格式規(guī)范指南

    JavaScript的代碼編寫(xiě)格式規(guī)范指南

    這篇文章主要介紹了JavaScript的代碼編寫(xiě)格式規(guī)范指南,文中所分享的一些細(xì)節(jié)基本上也是各大js代碼格式化插件所默認(rèn)約定俗成的,需要的朋友可以參考下
    2015-12-12
  • Javascript入門(mén)學(xué)習(xí)第六篇 js DOM編程

    Javascript入門(mén)學(xué)習(xí)第六篇 js DOM編程

    上篇文章納悶的問(wèn)題,將在這章和以后的幾章里,慢慢搞定。 從今天起,開(kāi)始學(xué)習(xí)DOM編程 讓我們慢慢稱為一名初級(jí)的js程序員。 然后往js匠人方向發(fā)展。
    2008-07-07
  • JavaScript中的異常處理

    JavaScript中的異常處理

    這篇文章介紹了JavaScript中異常處理的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Javascrip基礎(chǔ)之for循環(huán)和數(shù)組

    Javascrip基礎(chǔ)之for循環(huán)和數(shù)組

    這篇文章主要為大家介紹了Javascrip之for循環(huán)和數(shù)組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • javascript獲取元素CSS樣式代碼示例

    javascript獲取元素CSS樣式代碼示例

    如果想用javascript獲取一個(gè)元素的樣式信息,首先想到的應(yīng)該是元素的style屬性,下面我們看看javascript如何獲取元素CSS樣式
    2013-11-11
  • JavaScript中的document.referrer在各種瀏覽器測(cè)試結(jié)果

    JavaScript中的document.referrer在各種瀏覽器測(cè)試結(jié)果

    這篇文章主要介紹了JavaScript中的document.referrer在各種瀏覽器測(cè)試結(jié)果,包括在多種情況下每個(gè)瀏覽器能否用document.referrer取到值,非常珍貴的測(cè)試結(jié)果,需要的朋友可以參考下
    2014-07-07
  • JavaScript 基礎(chǔ)問(wèn)答 四

    JavaScript 基礎(chǔ)問(wèn)答 四

    JavaScript 下拉菜單中的鏈接
    2008-12-12
  • 使用js檢測(cè)瀏覽器的實(shí)現(xiàn)代碼

    使用js檢測(cè)瀏覽器的實(shí)現(xiàn)代碼

    本篇文章是對(duì)使用js檢測(cè)瀏覽器的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺談javascript中onbeforeunload與onunload事件

    淺談javascript中onbeforeunload與onunload事件

    javascript中onbeforeunload與onunload事件就是頁(yè)面加載前與頁(yè)面關(guān)閉時(shí)的兩個(gè)功能的函數(shù),可以防止頁(yè)面刷新時(shí)給提示再刷新或頁(yè)面關(guān)閉時(shí)給出提示,下面我來(lái)介紹onbeforeunload與onunload事件用法。
    2015-12-12
  • JavaScript中的prototype.bind()方法介紹

    JavaScript中的prototype.bind()方法介紹

    在JavaScript中,我們經(jīng)常用到函數(shù)綁定,而當(dāng)你需要在另一個(gè)函數(shù)中保持this上下文時(shí),使用Function.prototype.bind()會(huì)很方便
    2014-04-04

最新評(píng)論

鹤岗市| 西充县| 平原县| 辽阳市| 涡阳县| 栾城县| 铜梁县| 赣州市| 交城县| 淮滨县| 留坝县| 珲春市| 成安县| 忻州市| 洪泽县| 海林市| 江西省| 永城市| 永修县| 宁国市| 扶余县| 青阳县| 怀仁县| 浪卡子县| 绩溪县| 太仆寺旗| 昆山市| 苏尼特右旗| 宝清县| 饶阳县| 二连浩特市| 钦州市| 安泽县| 凤翔县| 海宁市| 嫩江县| 龙里县| 满洲里市| 华亭县| 杨浦区| 新竹市|