讓我們向那群電商網站的工程師致敬
他們的爆肝換得了我們商品的折扣
連不喜歡花錢如我都不小心手滑了一條RAM
便宜一千多塊真的太誇張了
光想一秒內會是幾千甚至幾萬個用戶登入
然後塞到同一個網頁,點同一顆按鈕
那個執行緒安全、伺服器負載就讓人發毛
今天來介紹一下我的JS在哪學的吧
JavaScript 全攻略:克服 JS 的奇怪部分
好像蠻多人有買這門課的,小農順便都把它當英聽在看
其他都是六角學院的課程
今天再來介紹我所收集的最後一篇2019鐵人賽的文章吧
最近紅到發火的機器學習
小農數學是爛在公式老是被錯,運算總是算錯
但當python有這些套件時就輕輕鬆鬆過了
另外在udemy上也有一個課程也是相當推薦
机器学习 A-Z (Machine Learning A-Z in Chinese)
直接上閹割版的陣列轉物件吧
/**
* @name 純陣列轉換物件陣列
* @author ChengYang
* @param ([[物件名稱,對應陣列資料index,處理方法]],arr)
* @description 第一參數若是一維數組,自動放入遞增序列
* 若是二維數組,則放入
* ""單一""參數處理===>
* [ObjKey,對應原arr[index],Function(data){return fnData}(可選)]
* ""複數""參數處理===>
* [ObjKey,對應原arr[index],Function(data){return fnData}(可選)]
* !!可穿插使用,使用方法建example
* 若資料處以階段該資料不放入新物件,自行在自訂方法中回傳false
* @example @ (單一參數)bulletin.js:37(複數參數)member_index.html:170
* 單一參數:Tools.arrToObj([
['msgTitle',0, function clg(data) {
console.log(data,data.length);
return data;
}],
['msg'],
['msgTime']
], arr)
* 複數參數:Tools.arrToObj([
['name', 0],
['value', 4],
['trend', [4,5], function(data) {
return (data[0] - data[1]).toFixed(3)
}]
],data)
*/
arrToObj: function (ObjItem, arr) {
var rearr = []; //回傳陣列
arr.forEach(function (el) { //遍歷API的arr
var newObj = {} //陣列物件成員
var dontpush = true; //該資料是否放入轉換後物件 true 放入,false不放入
for (let i = 0; i < ObjItem.length; i++) { //物件放置
if (typeof (ObjItem[i][1]) != "undefined") {
//完整版方法
// putindex(i, ObjItem[i][1]);
} else {
newObj[ObjItem[i][0]] = el[index];
}
}
if (dontpush) {
rearr.push(newObj)
}
});
return rearr;
}
請原諒小農將完整版隱藏
雖然這整個方法都是小農寫的
但礙於那良心與職業道德,恕無法整個公開
(聽說上班寫的東西,智慧財產就是公司的,我還不希望喝西北風)
但概念簡單說明一下
其他理論內容我們已經在上一篇一起看過了
在一般情況下
var obj = {}
//等同於
var obj = new Object();
然而當如果看官們已經寫了
function Person(name) {
this.name = name;
this.greeting = function() {
alert('Hi! I\'m ' + this.name + '.');
};
}
這樣子的方法類別宣告的話
則需要用下面的方式產生兩個完全不同的記憶體位置去做物件生成
var person1 = new Person('Bob');
var person2 = new Person('Sarah');
//呼叫方法
person1.name
person1.greeting()
person2.name
person2.greeting()
其他函數宣告
function f1(){};
var f2 = function(){}
其差別在於f1會做提升(hoisting)而f2不會
何謂提升呢?
以下面程式碼為例
var a='hello';
callfn(a);
function callfn(a){
console.log(a)
}
這個在於其他語言中或許會錯誤
但我們聊過js的運作模式:把文檔變字符串,然後變程式碼,也就是說可以理解成當語法解析讀到var、let、const時就明白,現在要切一塊地方宣告變數、當讀到function時就會知道這個東西會被提升(hoisting)
然而這段的話的意思就是把上面的程式碼變成下面
function callfn(a){
console.log(a)
}
var a='hello';
callfn(a);
因此我們簡單看到js的引擎把文件導入處理完後
將所有的實名方法提升自文檔最上面,因此使用方法於宣告前也不會出錯