引用类型(下)
1. Date類型
var someDate = new Date(Date.parse("May 25, 2004")); 與 var someDate = new Date("May 25, 2004"); 等價(jià)// GMT 時(shí)間 2000 年 1 月 1 日午夜零時(shí) var y2k = new Date(Date.UTC(2000, 0)); // GMT 時(shí)間 2005 年 5 月 5 日下午 5:55:55 var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));//簡(jiǎn)化 // 本地時(shí)間 2000 年 1 月 1 日午夜零時(shí) var y2k = new Date(2000, 0); // 本地時(shí)間 2005 年 5 月 5 日下午 5:55:55 var allFives = new Date(2005, 4, 5, 17, 55, 55);//Date.now() var start = Date.now(); //調(diào)用函數(shù) doSomething(); //取得停止時(shí)間 var stop = Date.now(), result = stop – start;1.1 繼承的方法
//日期比較 var date1 = new Date(2007, 0, 1); //"January 1, 2007" var date2 = new Date(2007, 1, 1); //"February 1, 2007" alert(date1 < date2); //true alert(date1 > date2); //false- 不同瀏覽器對(duì) toString() 和 toLocaleString() 有不同的實(shí)現(xiàn);
1.2 日期格式化方法
- toDateString();
- toTimeString();
- toLocaleDateString();
- toLocaleTimeString();
- toUTCString();
- 與 toLocaleString()和 toString()方法一樣,以上這些字符串格式方法的輸出也是因?yàn)g覽器而異的,
因此沒有哪一個(gè)方法能夠用來在用戶界面中顯示一致的日期信息。
1.3 日期/時(shí)間組件方法
- getTime() 返回表示日期的毫秒數(shù);與valueOf()方法返回的值相同
- setTime(毫秒) 以毫秒數(shù)設(shè)置日期,會(huì)改變整個(gè)日期
- getFullYear() 取得4位數(shù)的年份(如2007而非僅07)
- getUTCFullYear() 返回UTC日期的4位數(shù)年份
- setFullYear(年) 設(shè)置日期的年份。傳入的年份值必須是4位數(shù)字(如2007而非僅07)
- setUTCFullYear(年) 設(shè)置UTC日期的年份。傳入的年份值必須是4位數(shù)字(如2007而非僅07)
- getMonth() 返回日期中的月份,其中0表示一月, 11表示十二月
- getUTCMonth() 返回UTC日期中的月份,其中0表示一月, 11表示十二月
- setMonth(月) 設(shè)置日期的月份。傳入的月份值必須大于0,超過11則增加年份
- setUTCMonth(月) 設(shè)置UTC日期的月份。傳入的月份值必須大于0,超過11則增加年份
- getDate() 返回日期月份中的天數(shù)(1到31)
- getUTCDate() 返回UTC日期月份中的天數(shù)(1到31)
- setDate(日) 設(shè)置日期月份中的天數(shù)。如果傳入的值超過了該月中應(yīng)有的天數(shù),則增加月份
- setUTCDate(日) 設(shè)置UTC日期月份中的天數(shù)。如果傳入的值超過了該月中應(yīng)有的天數(shù),則增加月份
- getDay() 返回日期中星期的星期幾(其中0表示星期日, 6表示星期六)
- getUTCDay() 返回UTC日期中星期的星期幾(其中0表示星期日, 6表示星期六)
- getHours() 返回日期中的小時(shí)數(shù)(0到23)
- getUTCHours() 返回UTC日期中的小時(shí)數(shù)(0到23)
- setHours(時(shí)) 設(shè)置日期中的小時(shí)數(shù)。傳入的值超過了23則增加月份中的天數(shù)
- setUTCHours(時(shí)) 設(shè)置UTC日期中的小時(shí)數(shù)。傳入的值超過了23則增加月份中的天數(shù)
- getMinutes() 返回日期中的分鐘數(shù)(0到59)
- getUTCMinutes() 返回UTC日期中的分鐘數(shù)(0到59)
- setMinutes(分) 設(shè)置日期中的分鐘數(shù)。傳入的值超過59則增加小時(shí)數(shù)
- setUTCMinutes(分) 設(shè)置UTC日期中的分鐘數(shù)。傳入的值超過59則增加小時(shí)數(shù)
- getSeconds() 返回日期中的秒數(shù)(0到59)
- getUTCSeconds() 返回UTC日期中的秒數(shù)(0到59)
- setSeconds(秒) 設(shè)置日期中的秒數(shù)。傳入的值超過了59會(huì)增加分鐘數(shù)
- setUTCSeconds(秒) 設(shè)置UTC日期中的秒數(shù)。傳入的值超過了59會(huì)增加分鐘數(shù)
- getMilliseconds() 返回日期中的毫秒數(shù)
- getUTCMilliseconds() 返回UTC日期中的毫秒數(shù)
- setMilliseconds(毫秒) 設(shè)置日期中的毫秒數(shù)
- setUTCMilliseconds(毫秒) 設(shè)置UTC日期中的毫秒數(shù)
- getTimezoneOffset() 返回本地時(shí)間與UTC時(shí)間相差的分鐘數(shù)。例如,美國(guó)東部標(biāo)準(zhǔn)時(shí)間返回300。
在某地進(jìn)入夏令時(shí)的情況下,這個(gè)值會(huì)有所變化。
2. RegExp 類型
//三種模式: //1. g:global 模式; //2. i:case-insensitive 模式; //3. m:multiline 模式;/* * 匹配字符串中所有"at"的實(shí)例 */ var pattern1 = /at/g; /* * 匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫 */ var pattern2 = /[bc]at/i; /* * 匹配所有以"at"結(jié)尾的 3 個(gè)字符的組合,不區(qū)分大小寫 */ var pattern3 = /.at/gi;//對(duì)元字符進(jìn)行轉(zhuǎn)義/* * 匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫 */var pattern1 = /[bc]at/i; /* * 匹配第一個(gè)" [bc]at",不區(qū)分大小寫 */ var pattern2 = /\[bc\]at/i; /* * 匹配所有以"at"結(jié)尾的 3 個(gè)字符的組合,不區(qū)分大小寫 */ var pattern3 = /.at/gi; /* * 匹配所有".at",不區(qū)分大小寫 */ var pattern4 = /\.at/gi;/* * 匹配第一個(gè)"bat"或"cat",不區(qū)分大小寫 */ var pattern1 = /[bc]at/i; /* * 與 pattern1 相同,只不過是使用構(gòu)造函數(shù)創(chuàng)建的 */ var pattern2 = new RegExp("[bc]at", "i");- 由于 RegExp 構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對(duì)字符進(jìn)行雙重轉(zhuǎn)義。
盡量多使用 RegExp 構(gòu)造函數(shù);
var re = null, i;
for (i=0; i < 10; i++){
re = /cat/g;
re.test("catastrophe");
}for (i=0; i < 10; i++){
re = new RegExp("cat", "g");
re.test("catastrophe");
}
2.1 RegExp 實(shí)例屬性
- RegExp 的每個(gè)實(shí)例都具有下列屬性,通過這些屬性可以取得有關(guān)模式的各種信息。
global;
ignoreCase;
lastIndex;
multiline;
source;
2.2 RegExp 實(shí)例方法
//exec(); var text = "cat, bat, sat, fat"; var pattern1 = /.at/; var matches = pattern1.exec(text); alert(matches.index); //0 alert(matches[0]); //cat alert(pattern1.lastIndex); //0 matches = pattern1.exec(text); alert(matches.index); //0 alert(matches[0]); //cat alert(pattern1.lastIndex); //0 var pattern2 = /.at/g; var matches = pattern2.exec(text); alert(matches.index); //0 alert(matches[0]); //cat alert(pattern2.lastIndex); //3 matches = pattern2.exec(text); alert(matches.index); //5 alert(matches[0]); //bat alert(pattern2.lastIndex); //8//test(); var text = "000-00-0000"; var pattern = /\d{3}-\d{2}-\d{4}/;if (pattern.test(text)){alert("The pattern was matched."); }var pattern = new RegExp("\\[bc\\]at", "gi"); alert(pattern.toString()); // /\[bc\]at/gi alert(pattern.toLocaleString()); // /\[bc\]at/gi2.3 RegExp 構(gòu)造函數(shù)屬性
var text = "this has been a short summer"; var pattern = /(.)hort/g;/* * 注意: Opera 不支持 input、 lastMatch、 lastParen 和 multiline 屬性 * Internet Explorer 不支持 multiline 屬性 */ if (pattern.test(text)){alert(RegExp.input); // this has been a short summeralert(RegExp.leftContext); // this has been aalert(RegExp.rightContext); // summeralert(RegExp.lastMatch); // shortalert(RegExp.lastParen); // salert(RegExp.multiline); // false }//短屬性名 var text = "this has been a short summer"; var pattern = /(.)hort/g; /* * 注意: Opera 不支持 input、 lastMatch、 lastParen 和 multiline 屬性 * Internet Explorer 不支持 multiline 屬性 */ if (pattern.test(text)){alert(RegExp.$_); // this has been a short summeralert(RegExp["$`"]); // this has been aalert(RegExp["$'"]); // summeralert(RegExp["$&"]); // shortalert(RegExp["$+"]); // salert(RegExp["$*"]); // false }//捕獲組 var text = "this has been a short summer";var pattern = /(..)or(.)/g;if (pattern.test(text)){alert(RegExp.$1); //shalert(RegExp.$2); //t }2.4 模式的局限性
- ECMAScript 正則表達(dá)式不支持的特性:
? 匹配字符串開始和結(jié)尾的\A 和\Z 錨①
? 向后查找(lookbehind) ②
? 并集和交集類
? 原子組(atomic grouping)
? Unicode 支持(單個(gè)字符除外,如\uFFFF)
? 命名的捕獲組③
? s(single,單行)和 x(free-spacing,無間隔)匹配模式
? 條件匹配
? 正則表達(dá)式注釋
3. Function 類型
3.1 沒有重載(深入理解)
//沒有重載的本質(zhì) var addSomeNumber = function (num){return num + 100; };addSomeNumber = function (num) {return num + 200; };var result = addSomeNumber(100); //3003.2 函數(shù)聲明與函數(shù)表達(dá)式
//理解函數(shù)聲明和函數(shù)表達(dá)式在解析器中執(zhí)行的不同//正常 alert(sum(10,10)); function sum(num1, num2){return num1 + num2; }//報(bào)錯(cuò) alert(sum(10,10)); var sum = function(num1, num2){return num1 + num2; };3.3 作為值的函數(shù)
//類似委托 function callSomeFunction(someFunction, someArgument){return someFunction(someArgument); }function add10(num){return num + 10; }var result1 = callSomeFunction(add10, 10); alert(result1); //20//巧妙 function createComparisonFunction(propertyName) {return function(object1, object2){var value1 = object1[propertyName];var value2 = object2[propertyName];if (value1 < value2){return -1;} else if (value1 > value2){return 1;} else {return 0;}}; }var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}]; data.sort(createComparisonFunction("name")); alert(data[0].name); //Nicholas data.sort(createComparisonFunction("age")); alert(data[0].name); //Zachary3.4 函數(shù)內(nèi)部屬性
//arguments.callee(); //普通的階乘代碼 function factorial(num){if (num <=1) {return 1;} else {return num * factorial(num-1)} }//解耦后的階乘代碼 function factorial(num){if (num <=1) {return 1;} else {return num * arguments.callee(num-1)} }//解耦后的優(yōu)點(diǎn) var trueFactorial = factorial; factorial = function(){return 0; }; alert(trueFactorial(5)); //120 alert(factorial(5)); //0//this window.color = "red"; var o = { color: "blue" }; function sayColor(){alert(this.color); } sayColor(); //"red" o.sayColor = sayColor; o.sayColor(); //"blue"//caller,保存函數(shù)的函數(shù)的引用,因?yàn)閛uter調(diào)用了inner,所以指向outer function outer(){inner(); } function inner(){alert(inner.caller); } outer();//解耦和之后的caller,訪問相同的信息 function outer(){inner(); } function inner(){alert(arguments.callee.caller); } outer();3.5 函數(shù)的屬性和方法
//length,函數(shù)希望接受的命名參數(shù)的個(gè)數(shù) function sayName(name){alert(name); } function sum(num1, num2){return num1 + num2; } function sayHi(){alert("hi"); } alert(sayName.length); //1 alert(sum.length); //2 alert(sayHi.length); //0//prototype//apply() function sum(num1, num2){return num1 + num2; } function callSum1(num1, num2){return sum.apply(this, arguments); // 傳入 arguments 對(duì)象 } function callSum2(num1, num2){return sum.apply(this, [num1, num2]); // 傳入數(shù)組 } alert(callSum1(10,10)); //20 alert(callSum2(10,10)); //20//call() function sum(num1, num2){return num1 + num2; } function callSum(num1, num2){return sum.call(this, num1, num2); } alert(callSum(10,10)); //20//apply() 或 call() 更重要的作用,擴(kuò)充函數(shù)賴以運(yùn)行的作用域 運(yùn)行的作用域。下面來看一個(gè)例子。 window.color = "red"; var o = { color: "blue" }; function sayColor(){alert(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue//bind(),綁定作用域 window.color = "red"; var o = { color: "blue" }; function sayColor(){alert(this.color); } var objectSayColor = sayColor.bind(o); objectSayColor(); //blue4. 基本包裝類型
//要注意的是,使用 new 調(diào)用基本包裝類型的構(gòu)造函數(shù),與直接調(diào)用同名的轉(zhuǎn)型函數(shù)是不一樣的。 var value = "25"; var number = Number(value); //轉(zhuǎn)型函數(shù) alert(typeof number); //"number" var obj = new Number(value); //構(gòu)造函數(shù) alert(typeof obj); //"object"4.1 Boolean 類型
var falseObject = new Boolean(false); var result = falseObject && true; alert(result); //true var falseValue = false; result = falseValue && true; alert(result); //falsealert(typeof falseObject); //object alert(typeof falseValue); //boolean alert(falseObject instanceof Boolean); //true alert(falseValue instanceof Boolean); //false- 理解基本類型的布爾值與 Boolean 對(duì)象之間的區(qū)別非常重要。
當(dāng)然,我們的建議是永遠(yuǎn)不要使用 Boolean 對(duì)象。
4.2 Number 類型
var num = 10; alert(num.toString()); //"10" alert(num.toString(2)); //"1010" alert(num.toString(8)); //"12" alert(num.toString(10)); //"10" alert(num.toString(16)); //"a"var num = 10; alert(num.toFixed(2)); //"10.00"var num = 10.005; alert(num.toFixed(2)); //"10.01"var num = 10; alert(num.toExponential(1)); //"1.0e+1"var num = 99; alert(num.toPrecision(1)); //"1e+2" alert(num.toPrecision(2)); //"99" alert(num.toPrecision(3)); //"99.0"var numberObject = new Number(10); var numberValue = 10; alert(typeof numberObject); //"object" alert(typeof numberValue); //"number" alert(numberObject instanceof Number); //true alert(numberValue instanceof Number); //false4.3 String 類型
4.3.1 字符方法
var stringValue = "hello world"; alert(stringValue.charAt(1)); //"e"var stringValue = "hello world"; alert(stringValue.charCodeAt(1)); //輸出"101"var stringValue = "hello world"; alert(stringValue[1]); //"e"4.3.2 字符串操作方法
var stringValue = "hello "; var result = stringValue.concat("world"); alert(result); //"hello world" alert(stringValue); //"hello"var stringValue = "hello "; var result = stringValue.concat("world", "!"); alert(result); //"hello world!" alert(stringValue); //"hello"var stringValue = "hello world"; alert(stringValue.slice(3)); //"lo world" alert(stringValue.substring(3)); //"lo world" alert(stringValue.substr(3)); //"lo world" alert(stringValue.slice(3, 7)); //"lo w" alert(stringValue.substring(3,7)); //"lo w" alert(stringValue.substr(3, 7)); //"lo worl"var stringValue = "hello world"; alert(stringValue.slice(-3)); //"rld" alert(stringValue.substring(-3)); //"hello world" alert(stringValue.substr(-3)); //"rld" alert(stringValue.slice(3, -4)); //"lo w" alert(stringValue.substring(3, -4)); //"hel" alert(stringValue.substr(3, -4)); //""(空字符串)4.3.3 字符串位置方法
var stringValue = "hello world"; alert(stringValue.indexOf("o")); //4 alert(stringValue.lastIndexOf("o")); //7var stringValue = "hello world"; alert(stringValue.indexOf("o", 6)); //7 alert(stringValue.lastIndexOf("o", 6)); //4var stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit"; var positions = new Array(); var pos = stringValue.indexOf("e"); while(pos > -1){positions.push(pos);pos = stringValue.indexOf("e", pos + 1); } alert(positions); //"3,24,32,35,52"4.3.4 trim() 方法
var stringValue = " hello world "; var trimmedStringValue = stringValue.trim(); alert(stringValue); //" hello world " alert(trimmedStringValue); //"hello world"- 此外, Firefox 3.5+、 Safari 5+和 Chrome 8+還支持非標(biāo)準(zhǔn)的
trimLeft()和 trimRight()方法,分別用于刪除字符串開頭和末尾的空格。
4.3.5 字符串大小寫轉(zhuǎn)換方法
var stringValue = "hello world"; alert(stringValue.toLocaleUpperCase()); //"HELLO WORLD" alert(stringValue.toUpperCase()); //"HELLO WORLD" alert(stringValue.toLocaleLowerCase()); //"hello world" alert(stringValue.toLowerCase()); //"hello world"- 一般來說,在不知道自己的代碼將在哪種語言環(huán)境中運(yùn)行的情況下,還是使用針對(duì)地區(qū)的方法更穩(wěn)妥一些。
4.3.6 字符串的模式匹配方法
var text = "cat, bat, sat, fat"; var pattern = /.at/; //與 pattern.exec(text)相同 var matches = text.match(pattern); alert(matches.index); //0 alert(matches[0]); //"cat" alert(pattern.lastIndex); //0var text = "cat, bat, sat, fat"; var pos = text.search(/at/); alert(pos); //1var text = "cat, bat, sat, fat"; var result = text.replace("at", "ond"); alert(result); //"cond, bat, sat, fat" result = text.replace(/at/g, "ond"); alert(result); //"cond, bond, sond, fond"var text = "cat, bat, sat, fat"; result = text.replace(/(.at)/g, "word ($1)"); alert(result); //word (cat), word (bat), word (sat), word (fat)function htmlEscape(text){return text.replace(/[<>"&]/g, function(match, pos, originalText){switch(match){case "<":return "<";case ">":return ">";case "&":return "&";case "\"":return """;}}); } alert(htmlEscape("<p class=\"greeting\">Hello world!</p>")); //<p class="greeting">Hello world!</p>var colorText = "red,blue,green,yellow"; var colors1 = colorText.split(","); //["red", "blue", "green", "yellow"] var colors2 = colorText.split(",", 2); //["red", "blue"] var colors3 = colorText.split(/[^\,]+/); //["", ",", ",", ",", ""]4.3.7 localeCompare() 方法
var stringValue = "yellow"; alert(stringValue.localeCompare("brick")); //1 alert(stringValue.localeCompare("yellow")); //0 alert(stringValue.localeCompare("zoo")); //-1- 對(duì)于大小寫的比較因國(guó)家而異。
4.3.8 fromCharCode() 方法
alert(String.fromCharCode(104, 101, 108, 108, 111)); //"hello"4.3.9 HTML 方法
5. 單體內(nèi)置對(duì)象
5.1 Global 對(duì)象
5.1.1 URI 編碼方法
var uri = "http://www.wrox.com/illegal value.htm#start"; //"http://www.wrox.com/illegal%20value.htm#start" alert(encodeURI(uri)); //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start" alert(encodeURIComponent(uri));var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"; //http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start alert(decodeURI(uri)); //http://www.wrox.com/illegal value.htm#start alert(decodeURIComponent(uri));一 般 來 說 , 我 們 使 用 encodeURIComponent() 方法的時(shí)候要比使用encodeURI()更多,
因?yàn)樵趯?shí)踐中更常見的是對(duì)查詢字符串參數(shù)而不是對(duì)基礎(chǔ) URI進(jìn)行編碼。URI 方法能夠編碼所有 Unicode 字符,而原來的方法只能正確地編碼 ASCII 字符。
因此在開發(fā)實(shí)踐中,特別是在產(chǎn)品級(jí)的代碼中,一定要使用 URI 方法,
不要使用 escape()和 unescape()方法。
5.1.2 eval() 方法
eval("alert('hi')"); 這行代碼的作用等價(jià)于下面這行代碼: alert("hi");var msg = "hello world"; eval("alert(msg)"); //"hello world"eval("function sayHi() { alert('hi'); }"); sayHi();eval("var msg = 'hello world'; "); alert(msg); //"hello world"- 能夠解釋代碼字符串的能力非常強(qiáng)大,但也非常危險(xiǎn)。因此在使用 eval()時(shí)必須極為謹(jǐn)慎,
特別是在用它執(zhí)行用戶輸入數(shù)據(jù)的情況下。否則,可能會(huì)有惡意用戶輸入威脅你的站點(diǎn)
或應(yīng)用程序安全的代碼(即所謂的代碼注入)。
5.1.3 Global 對(duì)象的屬性
5.1.4 window 對(duì)象
var color = "red"; function sayColor(){alert(window.color); } window.sayColor(); //"red"var global = function(){return this; }();5.2 Math 對(duì)象
5.2.1 Math 對(duì)象的屬性
5.2.2 min() 和 max() 方法
var max = Math.max(3, 54, 32, 16); alert(max); //54 var min = Math.min(3, 54, 32, 16); alert(min); //3var values = [1, 2, 3, 4, 5, 6, 7, 8]; var max = Math.max.apply(Math, values);5.2.3 舍入方法
alert(Math.ceil(25.9)); //26 alert(Math.ceil(25.5)); //26 alert(Math.ceil(25.1)); //26alert(Math.round(25.9)); //26 alert(Math.round(25.5)); //26 alert(Math.round(25.1)); //25alert(Math.floor(25.9)); //25 alert(Math.floor(25.5)); //25 alert(Math.floor(25.1)); //255.2.4 random() 方法
//1到 10 之間 var num = Math.floor(Math.random() * 10 + 1);//2到 10 之間 var num = Math.floor(Math.random() * 9 + 2);function selectFrom(lowerValue, upperValue) {var choices = upperValue - lowerValue + 1;return Math.floor(Math.random() * choices + lowerValue); } var num = selectFrom(2, 10); alert(num); // 介于 2 和 10 之間(包括 2 和 10)的一個(gè)數(shù)值var colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"]; var color = colors[selectFrom(0, colors.length-1)]; alert(color); // 可能是數(shù)組中包含的任何一個(gè)字符串5.2.5 其他方法
轉(zhuǎn)載于:https://www.cnblogs.com/huoteng/p/4959174.html
總結(jié)
- 上一篇: 找出现实中符合这三种模式的互联网产品
- 下一篇: git 菜鸟入门