===== JavaScript 高級程序設計 - Professional JavaScript for Web Developers - ISBN 978-7-115-15209-1 =====
Chapter 2 - ECMAScript 基礎
2.2 變量
Camel 標記法
var myTestValue = 0, mySecondTestValue = "hi";
Pascal 標記法
var MyTestValue = 0, MySecondTestValue = "hi";
匈牙利類型標記法
var iMyTestValue = 0, sMySecondTestValue = "hi";
2.5 原始值和引用值
原始值 (primitive value) 是儲存在棧 (stack) 中的簡單數據段, 也就是說, 他們的值直接存儲在變量訪問的位置.
引用值 (reference value) 是儲存在堆 (heap) 中的對象, 也就是說, 存儲在變量處的值是一個指針 (point), 指向存儲對象的內存處.
2.6.5 Number 類型
ECMAScript 默認把具有 6 個或 6 個以上前導 0 的浮點數轉換成科學記數法.
Number 值集合的外邊界 Number.MIN_VALUE 到 Number.MAX_VALUE. 所有 ECMAScript 數都必須在這兩個值之間. 而超出的部份的 Number.POSITIVE_INFINITY 的值為 Infinity, Number.NEGATIVE_INFINITY 的值為 -Infinity 可以使用 isFinit() 方法做判斷.
還有個特別的 NaN (Not a Number) 不能用於計算上, 可以使用 isNaN() 方法做判斷.
alert(NaN == NaN); // outputs "false"
2.7.2 轉換成數字
ECMAScript 有兩種轉換成數字的方法 parseInt() 和 parseFloat() 其中 parseInt() 方法還有第二個參數, 可以把二進制, 八進制, 十六進制或其他任何進制的字符串轉換成整數.
var iNum1 = parseInt("010"); // return 8
var iNum2 = parseInt("010", 8); // return 8
var iNum3 = parseInt("010", 10); // return 10
2.7.3 強制類型轉換
Boolean(value) - 當 value 是 "" (empty string), null, undefined, 0 的時候會回傳 false.
Number(value) - 跟 parseInt(), parseFloat() 處理方式相似, 但是他轉換整個值而不是部份值
Number(false) // return 0
Number(true) // return 1
Number(undefined) // return NaN
Number(null) // return 0
Number("5.6.7") // return NaN
Number(new Object()) // return NaN
String(value) - 強制轉字符串, 在一種情況下跟 toString() 有區別
var s1 = String(null); // "null"
var oNull = null;
var s2 = oNull.toString(); // won't work, causes an error
2.8.1 Object 類
Object 類具有下列屬性:
constructor - 對創建對象的函數的引用 (指針). 對於 Object 類, 該指針指向原始的 object() 函數.
prototype - 對該對象的對象原型的引用. 對於所有的類, 他默認返回 Object 對象的一個實例.
Object 類還有幾個方法:
hasOwnProperty(property) - 判斷對象是否有某個特定的屬性. 必須用字符串指定該屬性.
isPrototypeOf(object) - 判斷該對象是否為另一個對象的原型.
propertyIsEnumerable(property) - 判斷給定的屬性是否可以用 for...in語句.
toString() - 返回對象的原始字符串表示.
valueOf() - 返回最適合該對象的原始值.
2.8.5 instanceof 運算符
在使用 typeof 運算符時無論什麼類型的對象, 他都返回 "object". 而 instanceof 運算符跟 typeof 運算符相似, 用於識別正在處理的對象的類型.
var oStringObject = new String("Hello, World!");
alert(oStringObject instanceof String); // output "trye"
2.9.2 位運算符
2. 位運算 NOT
位運算 NOT 由否定號 (~) 表示. 位運算 NOT 是三步的處理過程:
(1) 把運算數轉成 32 位數字.
(2) 把二進制型式轉成他的二進制反碼.
(3) 把二進制反碼轉換成浮點數.
var iNum1 = 25; // 25 is equal to 00000000000000000000000000011001
var iNum2 = ~iNum1; // convert to 11111111111111111111111111100110
alert(iNum2); // outputs "-26"
實質上就是對數字求負, 然後減 1, 因此 25 變成 -26
3. 位運算 AND - 用和號 (&) 表示
4. 位運算 OR - 用符號 (|) 表示
5. 位運算 XOR - 用符號 (^) 表示
6. 左移運算 - 由兩個小於號 (<<) 表示
7. 有符號右移運算 - 由兩個大於號 (>>) 表示
8. 無符號右移運算 - 由三個大於號 (>>>) 表示
2.10.3 有標籤的語句
可以用下列語法給語句加標籤, 以便以後調用:
label: statement
例如:
start: var iCount = 10; // 實際使用方式參考 2.10.4
這個例子中, 標籤 start 可被後來的 break 語句或 continue 語句引用.
2.10.4 break 語句和 continue 語句
break 可以立即退出循環, 阻止再次反覆執行任何代碼
var iNum = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
iNum++;
}
}
alert(iNum); // outputs "55"
continue 只是退出當前循環, 根據控制表達式還允許繼續進行下一次循環
var iNum = 0;
outermost:
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
iNum++;
}
}
alert(iNum); // outputs "95"
2.10.5 with 語句
with 語句用於設置代碼在特定對象中的作用域.
var sMessage = "hello, world";
with(sMessage) {
alert(toUpperCase()); // outputs "HELLO, WORLD"
}
with 語句是運行緩慢的代碼段, 尤其是在已設置了屬性值時. 大多數情況下, 如果可能, 最好避免使用他.
2.10.6 arguments 對象
開發者無需明確指出參數名
function sayHi() {
if (arguments[0] == "bye") return;
alert(arguments[0]);
}
e.preventDefault(); // 不執行預設行為
e.stopPropagation(); // 停止事件冒泡
-----
作者: breezy20 (看到我請叫我下線) 看板: Ajax
標題: [問題] JS 陣列排序
時間: Sat Feb 7 16:16:30 2009
我知道排序時,會把數字當字串去排
我在網路上看到一個解法
<script>
function comparisonFunction(a, b){
return(a-b);
}
myArray = ["80", "9", "700", 40, 1, 5, 200];
document.write( myArray.sort(
comparisonFunction) + "<br>");
</script>
但想不通那個function為啥這樣寫
a,b從哪來?
把a-b的值傳回去,為啥就能排列?
有大大能幫小弟解惑一下嗎
感激~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.237.198
[1;37m推 [33mblackbing [m [33m:sort可以傳入自訂的function,參數a,b代表被比較的數值 [m 02/07 17:42
[1;31m→ [33mblackbing [m [33m:若a應該在b前面則return正數,反之負數。 [m 02/07 17:45
-----
JsUnit - http://www.jsunit.net/
JsUnit is a Unit Testing framework for client-side (in-browser) JavaScript. It is essentially a port of JUnit to JavaScript. Also included is a platform for automating the execution of tests on multiple browsers and mutiple machines running different OSs. Its development began in January 2001.
ExtJS - http://extjs.com/products/extjs
特點: 高性能, 可以客製的 UI widgets
Dojo - http://dojotoolkit.org/
主要有三大塊: Core, Dijit, Dojox. Core 提供 Ajax, events, packaging, CSS-based querying, animations, JSON ...等. Dijit 是一個可以更換 skin 的 WEB UI. Dojox 包括一些創新/新穎的功能: DateGrid, charts, off-line, 跨瀏覽器向量繪圖.
YUI - http://developer.yahoo.com/yui/
MooTools
moo.fx
-- p.s. 底下被歸類為 Ajax 不一定是 js libs
Echo
AJAX Animator
qooxdoo
AjaxAnywhere
JxLib
Taconite
Kabuki AJAX Toolkit
JSON-RPC-Java
Buffalo
OpenLaszlo
ZK
ZK Spreadsheet
Tatami
ThinWire
AjaxTags
RichFaces
POSH
mini ajax
Tacos
AjaxPro
Script.aculo.us
Rico
jQpie
PhpGrid
WebOSX
JSI
Ajax toolkit framework
JavaFX
Silverlight
Ajax4JSF
jsLINB
eyeOS
Cappuccino
GraniteDS
SmartClient
SmaartGWT
Moonlight
ERDialog
Pear:HTML_AJAX
aSSL
GWTENT
phpsajax
My-BIC
modello
Mate
Ruboss
PHPLiveX
phpAjaxTags
xajax
NanoAjax
AjaxAC
RSPA