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 來瀏覽就可以完整瀏覽。


相關文章與資料

用佚代的方式瀏覽陣列


2021年10月25日 星期一

關於 Python 的繼承問題

 關於 Python 的繼承問題

前言

  在之前的 Javascript 的 class 繼承的注意事項 實驗了 JavaScript 的 super 的用法,這次把相同的做法放在 Python 會有一樣的結果嗎?在此把學習的過程做個紀錄。


內容

  範例如下

class BaseClass:
    def __init__(self):
        pass
    def call(self):
        print('I am BaseClass.')
#
class ExClass(BaseClass):
    def __init__(self):
        pass
    def call(self):
        print('I am ExClass.')
#
class ExClass1(ExClass):
    def __init__(self):
        pass
    def call(self):
        #Follow  code will failed!
        #super().super().call()
        super().call()
        print('I am ExClass1.')
#
a = ExClass1()
a.call()


實驗的結果和 JavaScript 一樣, super 只能單次使用,不能連著用,看來這個特性和 JavaScript 是一致的!


相關文章與資料

Javascript 的 class 繼承的注意事項

2021年10月18日 星期一

JavaScript 的 Static initialize(靜態初始化) 語法

 JavaScript 的 Static initialize(靜態初始化) 語法

前言

  在之前的 初探 JavaScript 的 class 語法 介紹了 class 的語法,但無法使用 Static initialize(靜態初始化) ,最近發現新標準已經開始支援了,在此做個紀錄。


內容

  範例如下

class CMyClass{
  static __var = 'Hello static member';
  static{
    console.log(CMyClass.__var);
  }
}


用起來相當直覺,只要用 "static {}" 起來就可以直接包在 class 的區塊裡,以前必須要寫在 class 的區塊外。這次也發現 static variable 也支援了, 不知不覺 JavaScript 已經實現了常見的 class 語法了。


參考資料

[ juejin.cn ] 即将到来的ECMAScript 2022标准


 相關文章與資料

初探 JavaScript 的 class 語法