.使用數(shù)組拼接出如下字符串
<pre>
var prod = { name: '女裝', styles: ['短款', '冬季', '春裝'] }; function getTpl(data){ //todo... }; var result = getTpl(prod); //result為下面的字符串 <dl class="product"> <dt>女裝</dt> <dd>短款</dd> <dd>冬季</dd> <dd>春裝</dd> </dl>
</pre><pre>
//Method-One
var prod = { name: '女裝', styles: ['短款', '冬季', '春裝'] }; function getTpl(data){ //思路:先把盒子造好,然后再?gòu)纳厦娴膶?duì)象里面拿數(shù)據(jù)裝進(jìn)去 var dress = []; dress.push("<dl class=\"product\">"); dress.push("<dt>" + data.name + "</dt>"); for(var key in data.styles){ dress.push("<dd>" + data.styles[key] + "</dd>") } dress.push("</dl>"); //此時(shí)得到一個(gè)數(shù)組..需要reflect如何把他轉(zhuǎn)化為下面的形式。 var a = dress.join(""); return a; }; var result = getTpl(prod); //result為下面的字符串
</pre><pre>
//Method-Two
function getTpl(data){ var something = "<dl class = \"product\">" for(var key in data){ if(typeof data[key] === "string") { something += ("<dt>"+data[key]+"</dt>") }else{ for(var i=0, x=data[key].length; i<x; i++){ something += ("<dd>" + data[key][i] + "</dd>"); } } } something += "</dl>"; console.log(something) return something };
</pre><pre>
//Method-Three function getTpl(data) { var dress = "<dl clss=\"product\">"+"\n"; dress += ("<dt>" + data.name + "</dt>"); dress += ("<dd>" + data.styles[0] + "</dd>"); dress += ("<dd>" + data.styles[1] + "</dd>"); dress += ("<dd>" + data.styles[2] + "</dd>"); dress += "</dl>"; return dress;
</pre>
.寫(xiě)出兩種以上聲明多行字符串的方法
<pre>
var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'
</pre><pre>
//這個(gè)緊挨,注意\n
str = "abcdeabcdeabcdeancde\nabcdeabcdeabcdeancde\nabcdeabcdeabcdeancde\nabcdeabcdeabcdeancde"
</pre><pre>
Method-One str = "abcdeabcdeabcdeancde" + "abcdeabcdeabcdeancde" + "abcdeabcdeabcdeancde" + "abcdeabcdeabcdeancde"
</pre><pre>
//這種可以在前加空格 str = "abcdeabcdeabcdeancde\n\ abcdeabcdeabcdeancde\n\ abcdeabcdeabcdeancde\n\ abcdeabcdeabcdeancde"
</pre><pre>
(function() {/* abcdeabcdeabcdeancde abcdeabcdeabcdeancde abcdeabcdeabcdeancde abcdeabcdeabcdeancde */}).toString().split('\n').slice(1,-1).join();
</pre>
.補(bǔ)全如下代碼,讓輸出結(jié)果為字符串: hello\\饑人谷
<pre>
var str = //補(bǔ)全代碼 console.log(str)
</pre><pre>
hello\\\\\\\\饑人谷
</pre>
以下代碼輸出什么?為什么?
<pre>
var str = 'jirengu\nruoyu' console.log(str.length)
</pre><pre>
13個(gè),因轉(zhuǎn)義字符雖然使用了\n換行但是空格并沒(méi)有算在長(zhǎng)度里面,\n
只占據(jù)了一個(gè)占位符.
</pre>
.寫(xiě)一個(gè)函數(shù),判斷一個(gè)字符串是回文字符串,如 abcdcba是回文字符串, abcdcbb不是.
<pre>
var a = "abcdcba"; var c = "abcdcbb" function judge(arg) { return arg == arg.split("").reverse().join(""); } judge(a);//s.. judge(c);//d..
</pre>
.寫(xiě)一個(gè)函數(shù),統(tǒng)計(jì)字符串里出現(xiàn)出現(xiàn)頻率最多的字符
<pre>
var dostring = "hahahaha, hello this is my world." function numeration(arg) { var i, listf={}; for(i = 0; i < arg.length; i++) { if(listf[arg[i]]) { ++listf[arg[i]]; }else{ listf[arg[i]] = 1 } } var counts; //聲明個(gè)計(jì)算 var maxValue = 0; //聲明個(gè)最大值 for(var key in listf){ //遍歷 if(listf[key] > maxValue) { //遍歷到的屬性的值大于counts counts = key; //就屬性賦給counts maxValue = listf[key]; //再把值賦給他 } } console.log(counts,maxValue); } numeration(dostring);
</pre><pre>
/** 取出字符串中重復(fù)字?jǐn)?shù)最多的字符 */ var words = 'sdfghjkfastgbyhnvdstyaujskgfdfhlaa'; //創(chuàng)建字符串 var word, //單個(gè)字符 length; //該字符的長(zhǎng)度 //定義輸出對(duì)象 var max = { wordName : '', //重復(fù)次數(shù)最多的字符 wordLength : 0 //重復(fù)的次數(shù) }; //遞歸方法,傳入字符串 (function(words) { if (!words) return; //如果字符串已經(jīng)變空則返回,結(jié)束遞歸 word = words[0]; //取出字符串中的第一個(gè)字符 length = words.length; //將length設(shè)為當(dāng)前字符串長(zhǎng)度 words = words.replace(new RegExp(word, 'g'), ''); //返回將字符串剔除當(dāng)前字符的剩余字符串 length = length - words.length; //重設(shè)length為當(dāng)前字符在字符串中的長(zhǎng)度 if (length > max.wordLength) //如果該字符重復(fù)次數(shù)大于maxLength,則重設(shè)maxLength為當(dāng)前字符重復(fù)次數(shù) max = { //重設(shè)對(duì)象的值 wordName : word, wordLength : length }; arguments.callee(words); //遞歸調(diào)用,傳入剩余字符串 })(words); console.log(max.wordName+"\n"+max.wordLength); //遞歸結(jié)束后輸出結(jié)果
</pre>
.寫(xiě)一個(gè)函數(shù),把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如
<pre>
function camelize(arg) { var momentvar = arg.split("-"); var result = ""; for(var i=0; i<momentvar.length; i++){ result += (momentvar[i].charAt(0).toUpperCase() + momentvar[i].slice(1)); } return result; }
</pre>
.寫(xiě)一個(gè)函數(shù),返回第一個(gè)字母為大寫(xiě)的字符 (***)
<pre>
ucFirst("hunger") == "Hunger"
</pre><pre>
function capitalize(arg) { return arg.charAt(0).toUpperCase() + arg.slice(1) }
</pre>
.寫(xiě)一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength,會(huì)把str截?cái)嗟絤axlength長(zhǎng),并加上...,如
<pre>
truncate("hello, this is hunger valley,", 10) == "hello, thi..."; truncate("hello world", 20) == "hello world"
</pre>
<pre>
function abbr(str, maxlength) { var a = str.slice(0, maxlength)+"..."; console.log(a); }
</pre>
.JSON問(wèn)題
- 什么是 JSON?
- 什么是 JSON格式數(shù)據(jù)?
- JSON字面量
- SON格式數(shù)據(jù)如何表示對(duì)象?
- window.JSON 是什么?
- 如何把JSON 格式的字符串轉(zhuǎn)換為 JS 對(duì)象?
- 如何把 JS對(duì)象轉(zhuǎn)換為 JSON 格式的字符串?
JSON格式(JavaScript Object Notation的縮寫(xiě))是一種用于數(shù)據(jù)交換的文本格式,2001年由Douglas Crockford提出,目的是取代繁瑣笨重的XML格式。
相比XML格式,JSON格式有兩個(gè)顯著的優(yōu)點(diǎn):書(shū)寫(xiě)簡(jiǎn)單,一目了然;符合JavaScript原生語(yǔ)法,可以由解釋引擎直接處理,不用另外添加解析代碼。所以,JSON迅速被接受,已經(jīng)成為各大網(wǎng)站交換數(shù)據(jù)的標(biāo)準(zhǔn)格式,并被寫(xiě)入ECMAScript 5,成為標(biāo)準(zhǔn)的一部分。
簡(jiǎn)單說(shuō),每個(gè)JSON對(duì)象,就是一個(gè)值。要么是簡(jiǎn)單類型的值,要么是復(fù)合類型的值,但是只能是一個(gè)值,不能是兩個(gè)或更多的值。這就是說(shuō),每個(gè)JSON文檔只能包含一個(gè)值。
JSON對(duì)值的類型和格式有嚴(yán)格的規(guī)定。JSON對(duì)象,其實(shí)就是JSON的值,基本要符合以下規(guī)則.
復(fù)合類型的值只能是數(shù)組或?qū)ο螅荒苁呛瘮?shù)、正則表達(dá)式對(duì)象、日期對(duì)象。
簡(jiǎn)單類型的值只有四種:字符串、數(shù)值(必須以十進(jìn)制表示)、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)。
字符串必須使用雙引號(hào)表示,不能使用單引號(hào)。
對(duì)象的鍵名必須放在雙引號(hào)里面。
數(shù)組或?qū)ο笞詈笠粋€(gè)成員的后面,不能加逗號(hào)
- JSON 語(yǔ)法是 JavaScript 對(duì)象表示語(yǔ)法的子集。
- 數(shù)據(jù)在名稱/值對(duì)中
- 數(shù)據(jù)由逗號(hào)分隔
- 花括號(hào)保存對(duì)象
- 方括號(hào)保存數(shù)組
- JSON 數(shù)據(jù)的書(shū)寫(xiě)格式是:名稱/值對(duì),名稱/值對(duì)組合中的名稱寫(xiě)在前面(在雙引號(hào)中),值對(duì)寫(xiě)在后面(同樣在雙引號(hào)中),中間用冒號(hào)隔開(kāi):
var json1 = {"name": "Byron", "age": "24"}
- 對(duì)象字面量其實(shí)就是一種簡(jiǎn)單的描素以及聲明方式,如上面例舉的: var count = { "one": 1, "two": 2, "three": 3 }, 因?yàn)楸旧韏son就是JavaScript語(yǔ)法集的一種,所以json字面量就是用json格式的JavaScript對(duì)象字面量
<pre>
var str = {name:"jirengu",age:2} JSON.stringify(str) //轉(zhuǎn)為字符串 JSON.parse(JSON.stringify(str)). //轉(zhuǎn)為對(duì)象
</pre>