亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

每日十條JavaScript經驗技巧(二)

2019-11-20 09:37:15
字體:
來源:轉載
供稿:網友

1. 非數值類型轉數值

使用Number()轉換時:

  1. undefined會轉為NaN
  2. 如果字符串以0開始,瀏覽器會忽略前導0,不會按照八進制進行轉換
  3. 如果字符串以0x開始,瀏覽器會按照十六進制轉化為十進制返回
  4. 如果字符串有字符,除(+,-,.)外都會轉為NaN,十六進制時,字符串包含任何非數字字符都返回NaN
  5. 如果是對象轉換,則對象先使用valueof(),然后按照規則轉換。如果無valueOf方法,則調用toString方法,再轉換。

使用parseInt()轉換時:

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

使用parseFloat()轉換時:

parseFloat和parseInt的第一個區別在于它在解析字符串是是遇到一個無效的浮點數值字符為止,比parseInt多了.
解析十六進制數值時返回0

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

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

2. 使用toString()輸出不同進制的數值

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

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

3. 位操作符時注意NaN和Infinity

在對NaN和Infinity使用位操作符時,這兩個數值都會被當成0來處理。 如果對于非數值應用位操作符,會先使用Number()函數將該值轉換為一個數值。

還有一點要注意的就是負數的無符號右移,無符號右移是以0來填充空位,而不像有符號右移以符號位填充空位,所以對正數的無符號右移和有符號右移結果相同,但對負數就不同了。無符號右移操作會把負數的二進制碼當成正數的二進制碼,而且負數是以補碼形式表示,因此會導致無符號右移后的結果相差非常大。

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

4. 特殊的數值運算

對于數值運算,如果有一個操作數為NaN,則結果為NaN。
對非數值應用使用一元加操作或減操作(+,-,正負號),如果該值無法轉換為數值(使用Number()方式轉換),則返回NaN。

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

Infinity和0相乘等于NaN,和非0數相乘為Infinity和-Infinity,取決于乘數的正負號。Infinity和Infinity相乘等于Infinity。

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

零除零為NaN,非零數除以零為Infinity或-Infinity。Infinity除以Infinity為NaN
對于取模運算,下面等式成立:

Infinity%2=NaN;2%-Infinity=2;0%Infinity=0;    //只要被除數為0,除數不為NaN,結果都為0Infinity%0=NaN;   //被除數可以為任意數,除數只要為0,結果都為NaNInfinity%Infinity=NaN

加法運算:如果兩個操作數都是字符串則+變為字符串連接。如果一個為字符串,一個為數值,將數值轉換為字符串,然后連接字符串,如果一個操作數是對象,布爾值則先調用它們的valueOf方法,如無,在調用toString方法。再根據返回值類型,判斷+號應該連接字符串還是相加。

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 字符串連接

減法運算:減法運算和加法運算十分相似,關于對象的處理也是一樣,所以不再說明。

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

5. 關系操作符的使用

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

只要有一個數值,就會執行數值比較,另一個不為數值,則轉為數值。對象先用valueOf,后用toString。其實對象無論執行什么運算都是這樣,有valueOf,則用valueOf返回值,否則使用toString返回值。
兩個都為字符串,則比較字符串的字符編碼值(ASCII值)
關于第一個還要注意,在一個時候字符串一個是數值時,字符串無法轉數值時,即為NaN會出現如下情況

var result = "a" < 3;  //false a轉換為NaNvar result = "a" >= 3;  //false 任何數和NaN進行相比都為false

6. ==和===

在JavaScript中,如果等式兩邊類型不同,或者僅包含一個對象,那么比較會分為兩種情況,轉型后比較和不轉型直接比較。 ==是先轉換在比較,===是不轉換直接比較。 對于來說===,只要類型不相等就返回false。 而對于==來說,分為如下幾種情況:

true會轉換為1,false會轉換為0。
字符串和數值比較,字符串會轉換為數值。
如果等式兩邊只有一個對象,這個對象會調用valueOf得到基本類型,如無valueOf方法調用toString方法。如果兩邊都是對象則不轉型。

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

下面是特殊的比較情況

null == undefined  //trueNaN != NaN     //trueNaN == NaN     //false"NaN" == NaN    //falseundefined == 0   //falsenull == 0      //false

7. for-in語句

for-in語句輸出順序不可預測,次序可能因為瀏覽器不同而有所差異。
要迭代的變量未null或undefined時,ECMAScript 5下不再拋出錯誤而是不執行循環體。如果想向前兼容,則在循環前判斷不為null或undefined。

8. swithc語句

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

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

9 函數的使用

函數內沒有return語句或return不帶任何返回值,則函數都會返回undefined。
函數的定義時和函數的調用時參數不比保持一致。換句話說兩種參數(形參和實參)并沒有任何聯系。函數定義時提供的變量只是使用時較為方便,就算不定義也可以獲得傳遞給函數的參數(通過arguments[])。

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

形參和arguments[]之間的關系如下,注意嚴格模式和非嚴格模式區別。

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]);   //testalert(arguments[1]);   //test2alert(ss);        //a}howManyArgs("a");

10. 函數參數的使用

在定義函數時,我們會把用到的參數寫到函數的括號內,但是在有多個可選參數的情況下就會不夠靈活,這個時候可以使用對象封裝多個可選參數。

 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" });

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国av一区二区在线在线观看| 欧美激情中文字幕在线| 91最新在线免费观看| 97碰在线观看| 91久久在线播放| 久久久久久91| 日韩极品精品视频免费观看| 国产91在线视频| 欧美在线xxx| 亚洲性生活视频| 色一情一乱一区二区| 福利视频导航一区| 蜜臀久久99精品久久久无需会员| 国产精品入口尤物| 69久久夜色精品国产69| 中文字幕亚洲二区| 国产91精品久久久久久| 亚洲欧美色婷婷| 欧美精品videos| 亚洲欧美日本精品| 久久久亚洲福利精品午夜| 98精品国产自产在线观看| 国产精品揄拍500视频| 日韩av网站电影| 亚洲国产精品yw在线观看| 亚洲国产女人aaa毛片在线| 精品国产欧美一区二区五十路| 精品久久香蕉国产线看观看亚洲| 久久色在线播放| 国产一区二区三区在线免费观看| 国产日韩换脸av一区在线观看| 亚洲一区二区国产| 久久综合色影院| 神马国产精品影院av| 久久精品成人欧美大片| 欧美老少配视频| 色与欲影视天天看综合网| 精品久久久久久久中文字幕| 欧美激情a在线| 激情懂色av一区av二区av| 国产一区二区三区毛片| 日韩高清电影免费观看完整| 久久久精品国产网站| 最近的2019中文字幕免费一页| 国产精品视频精品| 日韩av高清不卡| 久久久久久久久久久免费| 亚洲国产古装精品网站| 国产精品综合久久久| 北条麻妃在线一区二区| 久久色免费在线视频| 国产免费亚洲高清| 亚洲黄色av女优在线观看| 日韩激情片免费| 国产精品一二三视频| 国产女同一区二区| 日韩欧美精品网站| 欧美国产精品人人做人人爱| 中文字幕精品在线| 成人国产精品免费视频| 精品magnet| 97精品一区二区视频在线观看| 久久免费观看视频| 亚洲精品自产拍| 国模视频一区二区| 久久综合伊人77777| 欧洲成人免费aa| 日韩在线观看成人| 在线电影中文日韩| 亚洲精品福利免费在线观看| 91久久精品国产91性色| 91av视频在线| 日韩成人中文字幕在线观看| 日韩成人小视频| 一区二区在线视频播放| 亚洲二区在线播放视频| 91在线观看欧美日韩| 国产精品精品久久久| 成人观看高清在线观看免费| 欧美多人爱爱视频网站| 欧洲亚洲妇女av| 国产69精品99久久久久久宅男| 欧美激情精品久久久久久变态| 亚洲综合精品伊人久久| 欧美成人小视频| 国产不卡在线观看| 久久亚洲成人精品| 久久99国产精品久久久久久久久| 亚洲精品理论电影| 成人免费网站在线观看| 国产精品久久久久久久av大片| 亚洲视频国产视频| 午夜精品久久久久久久男人的天堂| 97色在线观看免费视频| 亚洲国产精品va在线观看黑人| 久久精品91久久香蕉加勒比| 欧美一区二区视频97| 欧美电影在线观看完整版| 91在线视频导航| 亚洲成人久久久久| 欧美高清电影在线看| 亚洲xxxxx性| 亚洲最大激情中文字幕| 伊人久久久久久久久久久久久| 亚洲精品aⅴ中文字幕乱码| 91免费版网站入口| 日韩一级裸体免费视频| 久久久久久久久国产精品| 久久中文字幕在线| 成人午夜在线影院| 亚洲精品国产电影| 久久中文字幕国产| 日韩精品极品视频免费观看| 91成人在线观看国产| 中文字幕日韩欧美在线视频| 日韩国产精品亚洲а∨天堂免| 亚洲香蕉成视频在线观看| 亚洲午夜性刺激影院| 精品美女国产在线| 亚洲欧美一区二区精品久久久| 国产男女猛烈无遮挡91| 91av免费观看91av精品在线| 久久国产加勒比精品无码| 91禁国产网站| 国产网站欧美日韩免费精品在线观看| 欧亚精品在线观看| 亚洲视频精品在线| 国产精品日韩在线观看| 欧美在线一级va免费观看| 爽爽爽爽爽爽爽成人免费观看| 亚洲欧洲在线观看| 日韩国产在线播放| 亚洲香蕉成人av网站在线观看| 久久亚洲国产精品| 国产精品视频资源| 91欧美激情另类亚洲| 精品福利樱桃av导航| 成人在线激情视频| 欧美大荫蒂xxx| 一本大道香蕉久在线播放29| 992tv成人免费影院| 成人有码视频在线播放| 日韩亚洲成人av在线| 日韩美女写真福利在线观看| 色综合五月天导航| 亚洲精品中文字幕av| 欧美国产精品va在线观看| 亚洲欧美日本伦理| 超碰日本道色综合久久综合| 久久91超碰青草是什么| 亚洲女成人图区| 国产成人亚洲精品| 国内精品久久久久久久久| 亚洲欧美国产高清va在线播| 久久91亚洲精品中文字幕奶水| 成人妇女淫片aaaa视频| 欧美黑人一级爽快片淫片高清| 在线播放国产一区二区三区| 欧美日韩激情视频8区| 久久精品欧美视频| 夜夜嗨av色综合久久久综合网| 国产精品日韩精品| 国产91九色视频| 欧美在线一级va免费观看|