欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型

 更新時間:2015年11月30日 10:50:17   作者:敷衍不起  
這篇文章主要介紹了JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型的相關(guān)資料,需要的朋友可以參考下

閱讀目錄

Object類型

1、通過構(gòu)造函數(shù)來創(chuàng)建
2、通過字面量表示法來創(chuàng)建對象

Array類型

同樣Array也有兩種創(chuàng)建方式:
如果我們想要打印數(shù)組中所有的值,直接打印數(shù)組的變量名就可以:
往數(shù)組添值:
棧方法、隊列方法:
 關(guān)于數(shù)組的排序:
 數(shù)組的一些操作方法:
查找位置方法
迭代方法

歸并方法

Date類型

RegExp類型

Function類型

三種表示法:

方法重載
函數(shù)內(nèi)部屬性(arguments 和 this)

基本包裝類型

瀏覽器的內(nèi)置對象
URI 編碼方法

總結(jié)

我們在《一步步學(xué)習(xí)javascript基礎(chǔ)篇(1):基本概念》中簡單的介紹了五種基本數(shù)據(jù)類型Undefined、Null、Boolean、Number和String。今天我們主要介紹下復(fù)雜數(shù)據(jù)類型(即引用數(shù)據(jù)類型)

Object類型

我們用的最多的引用類型就屬object類型了,一般用來存儲和傳輸數(shù)據(jù)是再好不過的。然,它的兩種創(chuàng)建方式我們是否了解呢?

1、通過構(gòu)造函數(shù)來創(chuàng)建

如: var obj = new Object();

在js中的引用類型有個非常靈活的用法,可以動態(tài)的附加屬性和賦值。

如:

var obj = new Object();
obj.name = "張三";//動態(tài)添加屬性并賦值
obj.age = 23;
alert(obj.name);

2、通過字面量表示法來創(chuàng)建對象

現(xiàn)在大家用得比較多的就是字面量表示法來創(chuàng)建對象了。

如:

var obj = {
 name: "張三",
 age: 23
};
alert(obj.age);

和上面的效果是等效的。通過這樣方式創(chuàng)建感覺結(jié)構(gòu)更加的清晰,更加有封裝的感覺。:)

我們還可以這樣用

如:

var obj = {};
obj.name = "張三";
obj.age = 23;
alert(obj.age);

如:

var obj = {
 "name": "張三",//給屬性加上雙引號
 age: 23
};
alert(obj.name);

是不是感覺很強大很靈活呢?我在訪問屬性的時候一般都是點出來,但是還有另外的方式。

如:(我們可以使用中括號的形式來訪問屬性值)

var obj = {
 "name tow": "張三",
 age: 23
};
//alert(obj.name tow);//這里會報錯,屬性不能有空格
alert(obj["name tow"]);//這里可以正常彈出

例:

Array類型

除了object之外,應(yīng)該屬數(shù)組用的最多了。下面來羅列下常見用法。

同樣Array也有兩種創(chuàng)建方式:

var arr = new Array(1, 2, 3, 4, 5);//通過構(gòu)造函數(shù)創(chuàng)建
var arr2 = [5, 4, 3, 2, 1];//通過字面量表達式來創(chuàng)建 

上面兩種方式是等效的,我們可以直接通過下標(biāo)的方式來訪問數(shù)組: alert(arr[2]); 。

如果我們想要打印數(shù)組中所有的值,直接打印數(shù)組的變量名就可以:

var arr2 = [5, 4, 3, 2, 1];//通過字面量表達式來創(chuàng)建
var str2 = "";
for (var i = 0; i < arr2.length; i++) {
 str2 += arr2[i] + ","
}
alert(str2);//打印拼接的字符串  
alert(arr2);//直接打印變量名(實際上會自動調(diào)用數(shù)組的toString方法)

例:

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達式來創(chuàng)建
var str2 = "";
for (var i = 0; i < arr2.length; i++) {
 str2 += arr2[i] + ","
}
alert(str2);//打印拼接的字符串

例:

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達式來創(chuàng)建
alert(arr2);//直接打印變量名(實際上會自動調(diào)用數(shù)組的toString方法)

上面直接打印arr2,我們發(fā)現(xiàn)默認都是以逗號分隔的。那么有時候,我們不想用逗號怎么辦呢。那你可能可以用到j(luò)oin方法

 var arr2 = [5, 4, 3, 2, 1];//通過字面量表達式來創(chuàng)建
alert(arr2.join('_'));//直接打印變量名(實際上會自動調(diào)用數(shù)組的toString方法)

往數(shù)組添值:

我們可以直接: arr2[4] = 7; arr2[5] = 8; 

還有一種更加巧妙地添值方式: arr2[arr2.length] = 9; arr2[arr2.length] = 10; ,下標(biāo)length剛好是數(shù)組最大長度的下一個,添加值后length再次動態(tài)自動累計。

棧方法、隊列方法:

什么是棧?(后進先出)。什么是隊列?(先進先出),我們怎樣用數(shù)組來模仿這種數(shù)據(jù)結(jié)構(gòu)的訪問方式?下面通過一張圖來解釋下數(shù)組對象提供的四個方法。

從圖可以看出:shift和push、unshift和pop的組合可以實現(xiàn)棧的數(shù)據(jù)結(jié)構(gòu)訪問,shitf和pop、shift和unshift的組合可以實現(xiàn)隊列的數(shù)據(jù)機構(gòu)訪問方式。 這里需要注意:pop和shift取數(shù)據(jù)的同時,數(shù)組中對于的值也同時移除了。

例:

 var arr2 = [5, 4, 3, 2, 1];
alert("arr2.pop:" + arr2.pop() + " arr2:" + arr2);

 關(guān)于數(shù)組的排序:

關(guān)于數(shù)組的排序有sort(正)reverse(反)。

先看個例子,大家猜想下結(jié)果:

var arr2 = [5, 14, 23, 12, 1];
alert(arr2.sort());

 然結(jié)果并不是我們想要的:

 var arr2 = [5, 14, 23, 12, 1];
alert(arr2.sort());

 為什么會這樣呢?因為sort不會直接比較數(shù)字類型,而已轉(zhuǎn)為string了再做的比較。那么我們想要比較數(shù)字怎辦?我們可以往sort傳函數(shù),例:

 function mycompare(o1, o2)
{
 return o1 - o2;//如果為正數(shù)則o1大,負數(shù)則o2大,零則相等。
}
var arr2 = [5, 14, 23, 12, 1];
alert(arr2.sort(mycompare));

 有人會問o1和o2是怎么來的?這是sort函數(shù)規(guī)定的。這樣說大家可能不好接受。下面,我們自己來模擬下sort的排序,大家就明白了。

var arr2 = [5, 14, 23, 12, 1, 123, 23, 4, 5, 6, 32, 5, 3, 2, 1];
arr2.mysort = function (fun) {
 //*********************具體排序過程*******************
 for (var i = 0; i < arr2.length - 1; i++) {
  for (var j = 0; j < arr2.length - i; j++) {
   if (fun(arr2[j], arr2[j + 1]) > 0) {//這里用我們傳進來的方法判斷是否要排序調(diào)換位置
    var temp = arr2[j];
    arr2[j] = arr2[j + 1];
    arr2[j + 1] = temp;
   }
  }
 }
 //***************************************************
 return arr2;
} 
function mycompare(o1, o2) {
 return o1 - o2;//回調(diào)函數(shù)(具體的比較規(guī)則)
}
alert(arr2.mysort(mycompare));

 var arr2 = [5, 14, 23, 12, 1, 123, 23, 4, 5, 6, 32, 5, 3, 2, 1];
arr2.mysort = function (fun) {
 //*********************具體排序過程*******************
 for (var i = 0; i < arr2.length - 1; i++) {
  for (var j = 0; j < arr2.length - i; j++) {
  if (fun(arr2[j], arr2[j + 1]) > 0) {//這里用我們傳進來的方法判斷是否要排序調(diào)換位置
   var temp = arr2[j];
   arr2[j] = arr2[j + 1];
   arr2[j + 1] = temp;
   }
  }
 }
 //***************************************************
 return arr2;
}
function mycompare(o1, o2) {
 return o1 - o2;//回調(diào)函數(shù)(具體的比較規(guī)則)
}
alert(arr2.mysort(mycompare));

當(dāng)然,我們模擬的并不是那么的好,大概就是這么個意思。

反序就簡單了:(直接reverse()就可以了)

function mysort(o1, o2)
{
 return o1 - o2;//如果為正數(shù)則o1大,負數(shù)則o2大,零則相等。
}
var arr2 = [5, 14, 23, 12, 1];
arr2.sort(mysort);
arr2.reverse();
alert(arr2);

數(shù)組的一些操作方法:
concat創(chuàng)建一個新的副本,并合并傳進來的參數(shù)

var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brow

slice創(chuàng)建一個新的副本,取數(shù)組的位置數(shù)據(jù)

var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);//從下標(biāo)為1的開始,到末尾
var colors3 = colors.slice(1, 4);//從下標(biāo)1(包含1)到4(不包含4)
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow

splice會改變原數(shù)組數(shù)據(jù),可實現(xiàn)對數(shù)組的刪、插和替換

 var colors = ["red", "green", "blue"];
 var removed = colors.splice(0, 1); // 刪除第一項(從下標(biāo)0開始,刪除1項)
 alert(colors); // green,blue
 alert(removed); // red,返回的數(shù)組中只包含一項
 removed = colors.splice(1, 0, "yellow", "orange"); // 從位置 1 開始插入兩項(從下標(biāo)0開始,刪除0項,并插入后面的參數(shù)數(shù)據(jù))
 alert(colors); // green,yellow,orange,blue
 alert(removed); // 返回的是一個空數(shù)組
 removed = colors.splice(1, 1, "red", "purple"); // 插入兩項,刪除一項(從下標(biāo)1開始,刪除1項[也就是yellow],并插入后面的參數(shù)數(shù)據(jù))
 alert(colors); // green,red,purple,orange,blue
 alert(removed); // yellow,返回的數(shù)組中只包含一項

查找位置方法

indexOf()和 lastIndexOf(),就是查找在數(shù)組中的位置,和string中的對應(yīng)方法差不多。

迭代方法

 every():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項都返回 true,則返回 true。
 filter():對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回 true 的項組成的數(shù)組。
 forEach():對數(shù)組中的每一項運行給定函數(shù)。這個方法沒有返回值。
 map():對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
 some():對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項返回 true,則返回 true。

以上方法都不會修改數(shù)組中的包含的值。

如:

var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array){
return (item > 2);
});
alert(everyResult); //false

其中。forEach和map區(qū)別不大,只是一個有返回值,一個沒有。實際中我們用forEach比較多,下面我們模擬forEach的實現(xiàn)。

var str = "", str2 = "";
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function (item, index, array) {
 str += item + "_";
});
//**************其實我們完全可以自己模擬實現(xiàn)*******
numbers.myforEach = function (fun) {
 for (var i = 0; i < numbers.length; i++) {
  fun(numbers[i], i, numbers);
 }
}
numbers.myforEach(function (item, index, array) {
 str2 += item + "*";
})
//***************************************************
alert("str:" + str + " str2:" + str2);

var str = "", str2 = "";
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function (item, index, array) {
 str += item + "_";
});
//**************其實我們完全可以自己模擬實現(xiàn)*******
numbers.myforEach = function (fun) {
 for (var i = 0; i < numbers.length; i++) {
  fun(numbers[i], i, numbers);
 }
}
numbers.myforEach(function (item, index, array) {
 str2 += item + "*";
})
//***************************************************
alert("str:" + str + " str2:" + str2);

歸并方法

 reduce()和 reduceRight(),這兩個方法是比較有意思的,以前還真沒接觸過。先看例子,再解釋:

var values = [1,2,3,4,5];
var sum = values.reduce(function(prev, cur, index, array){
 return prev + cur;
});
alert(sum); //15

也是個循環(huán),第一次執(zhí)行 prev 是 1, cur 是 2。第二次, prev 是 3(1 加 2 的結(jié)果), cur 是 3(數(shù)組的第三項)。這個過程會持續(xù)到把數(shù)組中的每一項都訪問一遍,最后返回結(jié)果。reduceRight只是方向相反。

下面我們來模擬:

var numbers = [1, 2, 3, 4, 5, 3];
var sum = numbers.reduce(function (prev, cur, index, array) {
 return prev + cur;
});
//***********************模擬實現(xiàn)reduce**************************
numbers.myreduce = function (fun) {
 for (var i = 0; i < numbers.length; i++) {
  var temp = 0;
  for (var j = 0; j < i; j++)
   temp += numbers[j];
  var tempNum = fun(temp, numbers[i], i, numbers);
 }
 return tempNum;
}
//*************************************************
var sum2 = numbers.myreduce(function (prev, cur, index, array) {
 return prev + cur;
})
alert("sum:" + sum + " sum2:" + sum2); //

var numbers = [1, 2, 3, 4, 5, 3];
var sum = numbers.reduce(function (prev, cur, index, array) {
 return prev + cur;
});
//***********************模擬實現(xiàn)reduce**************************
numbers.myreduce = function (fun) {
for (var i = 0; i < numbers.length; i++) {
 var temp = 0;
 for (var j = 0; j < i; j++)
  temp += numbers[j];
   var tempNum = fun(temp, numbers[i], i, numbers);
  }
  return tempNum;
}
//*************************************************
var sum2 = numbers.myreduce(function (prev, cur, index, array) {
 return prev + cur;
})
alert("sum:" + sum + " sum2:" + sum2); //

Date類型

我們很多時候需要測試一個函數(shù)的性能,可以取它的執(zhí)行進過時間:

//取得開始時間
var start = Date.now();
//調(diào)用函數(shù)
doSomething();
//取得停止時間
var stop = Date.now(),
result = stop – start;

下面列出一些常用方法

getTime() 返回表示日期的毫秒數(shù);與valueOf()方法返回的值相同
setTime(毫秒) 以毫秒數(shù)設(shè)置日期,會改變整個日期
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ù)(0到23)
getUTCHours() 返回UTC日期中的小時數(shù)(0到23)
setHours(時) 設(shè)置日期中的小時數(shù)。傳入的值超過了23則增加月份中的天數(shù)
setUTCHours(時) 設(shè)置UTC日期中的小時數(shù)。傳入的值超過了23則增加月份中的天數(shù)
getMinutes() 返回日期中的分鐘數(shù)(0到59)
getUTCMinutes() 返回UTC日期中的分鐘數(shù)(0到59)
setMinutes(分) 設(shè)置日期中的分鐘數(shù)。傳入的值超過59則增加小時數(shù)
setUTCMinutes(分) 設(shè)置UTC日期中的分鐘數(shù)。傳入的值超過59則增加小時數(shù)
getSeconds() 返回日期中的秒數(shù)(0到59)
getUTCSeconds() 返回UTC日期中的秒數(shù)(0到59)
setSeconds(秒) 設(shè)置日期中的秒數(shù)。傳入的值超過了59會增加分鐘數(shù)
setUTCSeconds(秒) 設(shè)置UTC日期中的秒數(shù)。傳入的值超過了59會增加分鐘數(shù)
getMilliseconds() 返回日期中的毫秒數(shù)
getUTCMilliseconds() 返回UTC日期中的毫秒數(shù)
setMilliseconds(毫秒) 設(shè)置日期中的毫秒數(shù)
setUTCMilliseconds(毫秒) 設(shè)置UTC日期中的毫秒數(shù)
getTimezoneOffset() 返回本地時間與UTC時間相差的分鐘數(shù)。例如,美國東部標(biāo)準時間返回300。在某地進入夏令時的情況下,這個值會有所變化

RegExp類型

兩種表示法:

var pattern1 = /at/g; 
var re = new RegExp("cat", "g"); 

后面的參數(shù)代表模式,如:g:表示全局(global)模式、i:表示不區(qū)分大小寫(case-insensitive)模式、m:表示多行(multiline)模式

關(guān)于正則了解不是很清楚,后期有機會在單獨學(xué)習(xí)整理正則這塊。

Function類型

三種表示法:

function sum (num, num) { return num + num; } 
var sum = function(num, num){ return num + num; }; 
var sum = new Function("num", "num", "return num + num"); 

以上三種都是可行的,不過我們平時用得比較多的是第一種,第二種也有用,第三種用得比較少,但是最能看出function的本質(zhì),其實就是一個Function對象的實例。

我們來看看1和2的區(qū)別。

alert(sum1(1, 2));//彈出值 3
alert(sum2(1, 2));//報異常[sum2 is not a function]
function sum1(num1, num2) { return num1 + num2; }
var sum2 = function (num1, num2) { return num1 + num2; };

因為js解析器是從上到下的解析,在執(zhí)行sum2的時候還沒有定義,所以報異常。但是sum1比較特殊,是申明式的。在執(zhí)行sum1之前就會”預(yù)解析“(函數(shù)聲明提升)。相當(dāng)于把sun1的定義提到了最上面(放到源代碼樹的頂部)。

方法重載

嚴格來說,js中是沒有方法重載的,不過我們可以根據(jù)參數(shù)的個數(shù)來模擬。(還有,js中函數(shù)的形參我們是不確定類型的)

例:
上面并沒有出現(xiàn)我們預(yù)料中的結(jié)果,因為第二次定義的sun1不是實現(xiàn)的重載,而是直接覆蓋了第一次的定義。下面,我們就簡單的模擬實現(xiàn)方法重載:

function sum1(num1, num2, num3) {
 if (num1 != undefined && num2 != undefined && num3 != undefined) {
  return num1 + num2 + num3;
 }
 else if (num1 != undefined && num2 != undefined)
  return num1 + num2;
}
alert(sum1(1, 2));
alert(sum1(1, 2, 3));

 函數(shù)內(nèi)部屬性(arguments 和 this)

arguments:類數(shù)組對象,包含著傳入函數(shù)中的所有參數(shù)。下面通過arguments實現(xiàn)上面的模擬重載:

function sum(num, num, num) {
 var temp = ;
 if (arguments.length == ) {
  //***********具體實現(xiàn)其邏輯*********************
  for (var i = ; i < arguments.length; i++) {
   temp += arguments[i];
  }
 }
 else {
  //***********具體實現(xiàn)其邏輯*********************
  for (var i = ; i < arguments.length; i++) {
   temp += arguments[i];
  }
 }
 return temp;
}
alert("+=" + sum(, ) + " ++=" + sum(, , ));

 function sum1(num1, num2, num3) {
var temp = 0;
if (arguments.length == 3) {
//***********具體實現(xiàn)其邏輯*********************
for (var i = 0; i < arguments.length; i++) {
temp += arguments[i];
}
}
else {
//***********具體實現(xiàn)其邏輯*********************
for (var i = 0; i < arguments.length; i++) {
temp += arguments[i];
}
}
return temp;
}
alert("1+2=" + sum1(1, 2) + " 1+2+3=" + sum1(1, 2, 3));

我們在第一篇博文里面有提一個問題:

六、

 var fun = function (num1) {
  if (num1 <= 1) {
   return 1;
  }
  else {
   return num1 * fun(num1 - 1);
  }
 }
 var fun2 = fun;
 fun = function () {
  return 1;
 }
 alert(fun2(5));//這里彈出什么? 

 不過,并沒有同學(xué)去解答,有人可能覺得太簡單,或是不樂意懶得去解答。這題的答案是:

 為什么會是這個答案呢?好像和我們預(yù)料中的不一樣。下面我們圖解:

我們可能發(fā)現(xiàn)了一個問題,那就是第4步調(diào)用的已經(jīng)不是所在的這個函數(shù)本身了(也就是沒有遞歸了),這不是我們想要的。我們要的是,不管外面怎么改變,4處都代表所在的函數(shù)指針。那么我們可以用到arguments的callee方法,例:

 函數(shù)的另一個內(nèi)部屬性this:

 首先我們看看這樣一個問題:

var color = "red";
var o = { color: "blue" };
function sayColor() {
 alert(this.color);
}
sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue"

為什么會有不同的結(jié)果?我們記住一句話,一般情況"哪個對象點出來的方法,this就是哪個對象"。上面的例子其實等效于:

window.color = "red";
var o = { color: "blue" };
function sayColor() {
 alert(this.color);
}
window.sayColor(); //"red"
o.sayColor = sayColor;
o.sayColor(); //"blue" 

 雖然"哪個對象點出來的方法,this就是哪個對象",但是有時候我們不想要這樣的結(jié)果,我們不想用對象點或者對象點出了想this是另外的對象。那么我們可以使用call:

 傳如的第一個參數(shù),直接賦值給函數(shù)里面的this。和call類似的有apply,區(qū)別看下面:

 var o = { color: "blue" };
 var o2 = { color: "red" };
 function sayColor(a, b) {
  alert(this.color + a + b);
 }
 sayColor.apply(o, [1, 2]);//只傳兩個參數(shù),第一個是為this賦值的對象,第二個是函數(shù)實參數(shù)組
 sayColor.call(o2, 1, 2);//可以傳多個參數(shù),第一個是為this賦值的對象,后面的是函數(shù)實參用逗號分割

基本包裝類型

 在這個系列的第一篇中有個問題:

四、

var obj1 = {}; obj1.name2 = "張三";
var str1 = "test"; str1.name2 = "李四";
alert(obj1.name2 + " " + str1.name2);

 為什么會是這樣的結(jié)果?因為str1.name2設(shè)置值的時候訪問的是string的包裝類,然后再次訪問str1.name2之前就把之前那個包裝類已經(jīng)被銷毀。

為什么要有包裝類?

因為可以像操作引用對象一樣操作基本數(shù)據(jù)類型,如: var s1 = "some text"; var s2 = s1.substring(2);

哪些基本類型有包裝類?

Boolean、Number和String類型。

瀏覽器的內(nèi)置對象

Global(其實也就是我們平時用的window)和Math(一些計算功能)

URI 編碼方法

encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
//encodeURI主要對完整的url進行編碼(空格會編碼成%20)【對應(yīng)該的解碼decodeURI】
alert(window.encodeURI("http://i.cnblogs.com/EditPosts.aspx?postid = 5002381"));
//encodeURIComponent會把url中的所有特殊字符進行轉(zhuǎn)碼(所以,我們一般用來進行部分url轉(zhuǎn)碼,如Url中的參數(shù))【對應(yīng)的解碼decodeURIComponent】
alert(window.encodeURIComponent("http://i.cnblogs.com/EditPosts.aspx?postid = 5002381"));
eval

這是一個js中最最最強大的函數(shù)了,相對與一個獨立的解析器。如我文中的操作實例就是用這個函數(shù)實現(xiàn)的。

如:

 <textarea class="test_code" style="width: %;height:px; max-height: px;">
//。。。。這里面寫js代碼
var obj = {}; obj.name = "張三";
var str = "test"; str.name = "李四";
alert(obj.name + " " + str.name);
 </textarea>
 <input type="button" class="test_code_but" onclick="eval($(this).prev().val());" value="運行" />

效果圖:

當(dāng)然,你還的引入jqeruy問題,博客園中默認就已經(jīng)引入了。所以,你不需要再次引入,你測試的話是看不到alert彈框的,因為博客園禁掉了。我的是用的jquery ui中的Dialog對話框做的。

相關(guān)文章

最新評論