hasschi 的網誌
這個部落格只是讓我免於忘記先前所看過、學習到的東西,文章內容多會以目前工作上有碰到的為主,多以 javascript 為記錄學習的重點
2017年10月31日 星期二
隨記兩三事: 在ASP.NET MVC5中建置以角色為基礎的授權機制
隨記兩三事: 在ASP.NET MVC5中建置以角色為基礎的授權機制: 測試環境: VS2013、MVC5、Windows7 在前一篇貼文中,已探索過如何在 MVC5中自定ASP.NET Identity ,接下來要來試試在MVC5中如何運用 ASP.NET Identity來設定一個以 "角色"為基礎的授權機制...
2014年7月16日 星期三
【javascript】var 與 不var的差別
先前看到有人在一個論壇上po了這個問題
請問:有var跟沒var應用上的差別?謝謝
菜鳥提問:
一.
二.
請問使用上一跟二,會有什麼差別呢
菜鳥再此感謝
------------------------------------------
心寫來潮寫了這篇文章
從他的提問,結果上來說是沒有分別的,但實際上還是有分別:
先簡單說一下javascript的預編譯。
當瀏覽器載入js之後,會先對js的程式做一下預編譯
當你程式是這樣:
你猜猜結果會是什麼?
結果會alert 123 出來,這是寫程式邏輯與編譯邏輯有稍微的不同
js引擘會將變數預先宣告在函數的開頭
上列的範例會變成:
實際的情況:
分析實際情況:
最後回到問題:
一.
這個答案具體要看情況
var one = function(){}
這個是暱名函數
function one(){}
這個是具名函數
這兩者的不同我就不在這邊說明了
但你可以用.toString() 來看看他們有什麼不同的地方
請問:有var跟沒var應用上的差別?謝謝
菜鳥提問:
一.
var one = function () { return "one"; };
二.
function one () { return "one"; };
請問使用上一跟二,會有什麼差別呢
菜鳥再此感謝
------------------------------------------
心寫來潮寫了這篇文章
從他的提問,結果上來說是沒有分別的,但實際上還是有分別:
先簡單說一下javascript的預編譯。
當瀏覽器載入js之後,會先對js的程式做一下預編譯
當你程式是這樣:
if("a" in window){ var a = 123; } alert(a);
你猜猜結果會是什麼?
結果會alert 123 出來,這是寫程式邏輯與編譯邏輯有稍微的不同
js引擘會將變數預先宣告在函數的開頭
上列的範例會變成:
var a;//這行實際意味:window.a = undefined; 與null不同 if("a" in window){ //a存在於window,true a = 123;//window.a = 123; } alert(a);//window.alert( window.a );好這跟問題有什麼關係? 有一點點的關係。 當使用
function a(){ }無疑的是宣告 a這個函數,但預編譯的情況下,會直接將 a 賦值 簡單範例一下:
alert(a()); function a(){ return 1; }結果會alert 1
實際的情況:
var a; a = function a(){return 1;} alert(a());那來複雜的
a(); var a = function(){alert("1")} function a(){alert("2")} a();結果是會是:先出現2 再出現1
分析實際情況:
var a; a = function a(){alert("2")} a(); a = function(){alert("1")} a();
最後回到問題:
一.
var one = function () { return "one"; };二.
function one () { return "one"; };請問使用上一跟二,會有什麼差別呢
這個答案具體要看情況
PS:補充一點
var one = function(){}
這個是暱名函數
function one(){}
這個是具名函數
這兩者的不同我就不在這邊說明了
但你可以用.toString() 來看看他們有什麼不同的地方
2014年4月10日 星期四
2014年1月19日 星期日
【Javascript】Array.sort() 自訂排序規則
今天使用 native 的函數 sort() 來排序用戶輸入的資料
在數值的部份我就有點納悶
[1, 6, 4, 10, 20, 2]
這幾個數字由小排到大居然會是
[1, 10, 2, 20, 4, 6]
猜想應該是統一使用 toString() 採 ascii 碼來排序
這個時候就要自訂如何去排序啦
根據 w3c 的文件
Array.sort() 內可以傳入一個函數
參數值會有 a跟b 兩個
而sort函數會依照傳入的函數所回傳的結果來決定a 與 b 是否要交換位置
先看我改後的js (ascending):
依據回傳結果
小於0的話A在前面
等於0的話不變
大於0的話A在後面
如果是要由大排到小的話 (descending)
就改為:
在數值的部份我就有點納悶
[1, 6, 4, 10, 20, 2]
這幾個數字由小排到大居然會是
[1, 10, 2, 20, 4, 6]
猜想應該是統一使用 toString() 採 ascii 碼來排序
這個時候就要自訂如何去排序啦
根據 w3c 的文件
Array.sort() 內可以傳入一個函數
參數值會有 a跟b 兩個
而sort函數會依照傳入的函數所回傳的結果來決定a 與 b 是否要交換位置
先看我改後的js (ascending):
var myArr = new Array(1, 6, 4, 10, 20, 2); myArr.sort(function (A, B) { return A - B; }); console.log(myArr); //[1, 2, 4, 6, 10, 20]
依據回傳結果
小於0的話A在前面
等於0的話不變
大於0的話A在後面
如果是要由大排到小的話 (descending)
就改為:
myArr.sort(function (A, B) { return B - A; });
【CSS】 A標籤在手機上觸發不到的問題
剛剛測試手機版 Web App 的時候發現一個問題
怎麼某些按鈕點了沒有反應
明明js都是套一樣的
仔細檢查後發現,原來樣式中被加入了
text-indent: -9999px;
由於這一行的關係
在電腦上模擬都是非常正常,只有手機上有觸碰不到的問題
要按在按鈕的最左方,大概剩1px的反應區
所以變得非常難按到
雖然只花了幾分鐘就解決了,但覺得蠻神奇的
怎麼某些按鈕點了沒有反應
明明js都是套一樣的
仔細檢查後發現,原來樣式中被加入了
text-indent: -9999px;
由於這一行的關係
在電腦上模擬都是非常正常,只有手機上有觸碰不到的問題
要按在按鈕的最左方,大概剩1px的反應區
所以變得非常難按到
雖然只花了幾分鐘就解決了,但覺得蠻神奇的
2013年12月16日 星期一
【Javascript】String.format 格式化字串
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String.Format = function (format, Args) { | |
var args = arguments; | |
var replaceObj = {}; | |
var i = 1; | |
if (typeof Args === "object") { | |
for (var prop in Args) { | |
format = format.replace(new RegExp("{" + prop + "}", "g"), Args[prop]); | |
} | |
return format; | |
} else { | |
if (args.length > 1) { | |
for (; i < args.length; i++) { | |
replaceObj["{" + (i - 1) + "}"] = args[i]; | |
} | |
} | |
return format.replace(/\{\d+\}/g, function (resourse) { | |
return replaceObj[resourse]; | |
}); | |
} | |
}; |
以前常利用c#的String.fomat來達到我想要的格式輸出
最近要用js來將某些資料更新到前端畫面,就寫了一下,不過還並不完整
String.Format("{0}, Javascript! {1}.", "Hi", "This is test"); //Hi, Javascript! This is test.
String.Format("{greeting}, {name}! {something}.",
{
greeting:"Hi",
name:"Javascript",
something:"This is test"
});//Hi, Javascript! This is test.
2013年12月15日 星期日
【Javascript】 ECMA-404 標準 JSON
JSON Text
原出處:Standard ECMA-404 The JSON Data Interchange Format
- [U+005B left square bracket
- {U+007B left curly bracket
- ]U+005D right square bracket
- }U+007D right curly bracket
- :U+003A colon
- ,U+002C comma
true U+0074 U+0072 U+0075 U+0065
false U+0066 U+0061 U+006c U+0073 U+0065
JSON值包含
- object
- array
- number
- string
- true
- false
- null
\" represents the quotation mark character (U+0022).
\\ represents the reverse solidus character (U+005C).
\/ represents the solidus character (U+002F).
\b represents the backspace character (U+0008).
\f represents the form feed character (U+000C).
\n represents the line feed character (U+000A).
\r represents the carriage return character (U+000D).
\t represents the character tabulation character (U+0009).
原出處:Standard ECMA-404 The JSON Data Interchange Format
訂閱:
文章 (Atom)