2021年11月29日 星期一

關於 JavaScript 的 使用負值當索引的注意事項

 關於 JavaScript 的 Array 使用負值當索引的注意事項

前言

  最近發現 JavaScript 的 2022 標準裡有新增 Array 可以使用負值當索引,實際用了以後發現一點問題,在此做個紀錄。


內容

  範例如下

let ar = [ 1 , 2 , 3, 4 , 5 ];
console.log( ar.at(-2) );//4
let ar1 = ar.slice(3,5);
console.log(ar1);//[4, 5]
//Follow code has trap...
let ar2 = ar.slice(-2,0);
console.log(ar2);//[]
//
let ar3 = ar.slice(-2);
console.log(ar3);//[4, 5]


使用負值當索引幾乎可以想成倒過來取得,就像範例的"ar1"的做法一樣,但如果用這個想法用在 slice() 時就發現有問題,在範例的"ar2"的用 0 當作結尾,結果會得到空陣列,如果要取到結尾要用"ar3"的作法才行,也就是說 0 不能當作負值的結尾,這點要注意。


參考資料

[developer.mozilla.org ] Array.prototype.at()

2021年11月22日 星期一

關於 JavaScript 的 arguments 變數

 關於 JavaScript 的 arguments 變數

前言

  最近使用 JavaScript 的 arguments 變數發現跟自己想的不太一樣,在此做個紀錄。


內容

  範例如下

function showAruguments(){
  //
  for(let i=0;i<arguments.length;i++){
    console.log(`Array[${i}]:${arguments[i]}`);
  }
  //arguments not suport forEach...
//   arguments.forEach(function(ele){
//     console.log(ele);
//   });
  let args = Array.from(arguments);
  args.forEach(function(ele){
    console.log(ele);
  });
}

showAruguments(1,2);


在 function 裡可以透過 arguments 來實現可變引數,這個變數用起來很像 Array ,但實驗一下則不然,新的 Array 標準的 forEach() 是不支援的!如果要優雅的提取 arguments ,可以透過 Array.from() 來創造一個新的 Array ,在用新的 Array 來使用 forEach()。


相關文章與資料

用佚代的方式瀏覽陣列

2021年11月15日 星期一

在 JavaScript 裡取數值的精度

 在 JavaScript 裡取數值的精度

前言

  最近需要過濾數值的精度時發現遽然沒有預設的 function ,所以就自己來寫一個,在此做個紀錄。


內容

  範例如下

function ExtraFloatValue(value, exp){
  if(exp === undefined || exp < 0 )
    return value;
  let baseValue = Math.pow(10 , exp);  
  return Math.floor(value * baseValue) / baseValue;
}
console.log( ExtraFloatValue(3.14159 , 4) );//3.1415


範例的用法很簡單 , exp 是要取的精度,所以範例的結果會取到小樹的第四位。

2021年11月8日 星期一

Javascript 的 function 寫法的問題

 Javascript 的 function 寫法的問題

前言

  最近在偶然間發現 JavaScript 的 function 有我不知道的寫法,在此做個紀錄。


內容

  範例如下

function myCall(){
  console.log('myCall()');
}
let myCall1 = function(){
  console.log('myCall1()');
}
//Not recommanded
let f = function myCall2(){
  console.log('myCall12()');
}
//Follow will be failed
//myCall12();
f();

  

前面兩種是常見的 function 寫法,第三種是新發現的寫法,當然也發現這寫法會讓我以為 myCall() 與 f() 都可以正確喚起,但是實則不然, myCall2() 是不可以喚起的!雖然這個寫法看不出有什麼優勢,但還是學習了。

2021年11月1日 星期一

使用 JavaScript 的 Array 的注意事項

 使用 JavaScript 的 Array 的注意事項

前言

  最近使用 JavaScript 的 Array 發現跟自己的觀念有不一樣的地方,在此把學習的過程做個紀錄。


內容

  範例如下

let a = [ 1  , 2 , 3 , 4 , 5];
let ar = new Array( 1 , 2 , 3 , 4 , 5 );
let ar1 = new Array( 10 );
console.log(`a length : ${ a.length }`);
console.log(`ar length : ${ ar.length }`);
//ar1 not equal ar1 = [ 10 ]
console.log(`ar1 length : ${ ar1.length }`);


//forEach() will ignored undefined value
//so,nothing to show
ar1.forEach(function(ele){
  console.log(ele);
});

//All value are undefined
for(let i = 0 ; i < ar1.length ; i++)
  console.log(`ar1[ ${ i } ] : ${ ar1[i] }`);


範例的'a'使用常見的手法建置陣列,'ar'使用的是 new Array() 來達成,但'ar1'看似建構一個只有一個元素的陣列,但其實不然,它建構的是擁有 10 個元素的陣列!內容全都是 undefined ,再來說一下最近才發現 forEach() 會過濾 undefined 數值,如果使用傳統的 for 來瀏覽就可以完整瀏覽。


相關文章與資料

用佚代的方式瀏覽陣列