字符串與JSON

0 . 對(duì)于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是什么?

1 . 使用數(shù)組拼接出如下字符串,其中styles數(shù)組里的個(gè)數(shù)不定

var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTpl(data){
//todo...
};
var result = getTplStr(prod);  //result為下面的字符串
<dl class="product">
    <dt>女裝</dt>
    <dd>短款</dd>
    <dd>冬季</dd>
    <dd>春裝</dd>
</dl>

答案:

  • 直接拼接法
var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTplStr(data){
    return '<dl class="product">\n'
            +'\t<dt>'+data['name']+'</dt>\n'
            +'\t<dd>'+data['styles'][0]+'</dd>\n'
            +'\t<dd>'+data['styles'][1]+'</dd>\n'
            +'\t<dd>'+data['styles'][2]+'</dd>\n'
            +'</dl>'
};
var result = getTplStr(prod);  //result為下面的字符串
<dl class="product">
    <dt>女裝</dt>
    <dd>短款</dd>
    <dd>冬季</dd>
    <dd>春裝</dd>
</dl>
  • 儲(chǔ)存為數(shù)組轉(zhuǎn)為字符串法
var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTplStr(data){
    var arr = [];
    arr.push("<dl class=\"product\">\n");
    arr.push("\t<dt>"+data.name+"</dt>\n")
    for (var key in data.styles) {
        arr.push("\t<dd>"+data.styles[key]+"</dd>\n")
    }
    arr.push("</dl>")
    return arr.join('');
};
var result = getTplStr(prod);

2 . 寫(xiě)出兩種以上聲明多行字符串的方法

  • 第一種:"+"連接
var str = 'yangyang'
    +'is'
    +'very'
    +'good'
    +'!'
  • 第二種:利用注釋?zhuān)侨绻扇∫恍嚎s處理可能會(huì)出現(xiàn)問(wèn)題
(function str(){/*
line 1
line 2
line 3
*/}).toString().split('\n').slice(1,-1).join(\n);
  • 第三種:轉(zhuǎn)義符\ 但是轉(zhuǎn)義符后不能有其他字符,錯(cuò)誤很不容易發(fā)現(xiàn)
var str ='luoqian \
is \
very \
good'

3 . 補(bǔ)全如下代碼,讓輸出結(jié)果為字符串: hello\饑人谷

var str = //補(bǔ)全代碼
console.log(str)

結(jié)果:

var str = "hello\\饑人谷"
console.log(str)

4 . 以下代碼輸出什么?為什么

var str = 'jirengu\nruoyu'
console.log(str.length) //13 \n是轉(zhuǎn)義字符代表?yè)Q行只占據(jù)一個(gè)字符,且空格并不會(huì)計(jì)算在長(zhǎng)度內(nèi)

5 . 寫(xiě)一個(gè)函數(shù),判斷一個(gè)字符串是回文字符串,如 abcdcba是回文字符串, abcdcbb不是

var a= 'abcdcba';
function obj(str){
    newstr=str.split('').reverse().join('');
    if(str==newstr){
        console.log('該字符串是回文字符串');
        }else{
            console.log('該字符串不是回文字符串');
        }   
    }
    obj(a);

6 . 寫(xiě)一個(gè)函數(shù),統(tǒng)計(jì)字符串里出現(xiàn)出現(xiàn)頻率最多的字符

    function demo(str){
            strs = str.split("").sort();//將字符串分解成單字符數(shù)組,并排序(排序可不用)
            //console.log(strs);//這是調(diào)試用的
            var counters = [];//定義一個(gè)數(shù)組來(lái)保存字符出現(xiàn)的次數(shù)
            for(var i = 0;i<strs.length;i++){//用兩個(gè)for循環(huán)來(lái)遍歷strs數(shù)組內(nèi)字符出現(xiàn)的次數(shù),用temp計(jì)數(shù)。
                var temp=0;
                for(var j = 0;j<strs.length;j++){
                    if(strs[i]==strs[j]){
                        temp++;
                    }
                }
                //console.log(strs[i]+":"+temp);//這是調(diào)試用的
                if(Array.isArray(counters[temp])){//判斷是否數(shù)組
                    if(!counters[temp].some(function(elem){//判斷數(shù)組里面是否有相同元素。
                            return elem==strs[i];
                        }))
                        counters[temp].push(strs[i]);//沒(méi)有相同元素則push字符到相應(yīng)的以次數(shù)為腳標(biāo)的二維數(shù)組中。
                }else {
                    counters[temp] = [];//不是數(shù)組,則定義空數(shù) 組。
                    counters[temp].push(strs[i]);//同時(shí)push字符到相應(yīng)的以次數(shù)為腳標(biāo)的二維數(shù)組中。主要是第一次push時(shí)。
                }
            }
            console.log(counters[counters.length-1]);//那么最后一個(gè)二維數(shù)組內(nèi)容就是次數(shù)最多的字符,出現(xiàn)的次數(shù)就是counters.length-1。
            return counters;
        }

7 . 寫(xiě)一個(gè)camelize函數(shù),把my-short-string形式的字符串轉(zhuǎn)化成myShortString形式的字符串,如

camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

結(jié)果:

function camelize(str){
            var str1=[];
            var stra =str.split("-");
            for(var i=0;i< stra.length;i++){
                if(i==0){
                    str1[i]=stra[i]
                }else {
                    str1[i]=stra[i].replace(stra[i][0],stra[i][0].toUpperCase());
                }
            }
            return str1.join("");
        }
camelize("background-color") == 'backgroundColor'
camelize("list-style-image") == 'listStyleImage'

8 . 寫(xiě)一個(gè) ucFirst函數(shù),返回第一個(gè)字母為大寫(xiě)的字符 (***

ucFirst("hunger") == "Hunger"

結(jié)果:

function ucFirst(str){
return str.replace(str[0],str[0].toUpperCase());
}
ucFirst("hunger") == "Hunger"

9 . 寫(xiě)一個(gè)函數(shù)truncate(str, maxlength), 如果str的長(zhǎng)度大于maxlength,會(huì)把str截?cái)嗟?code>maxlength長(zhǎng),并加上...,如

truncate("hello, this is hunger valley,", 10)) == "hello, thi...";
truncate("hello world", 20)) == "hello world"

結(jié)果:

function truncate(str,maxlength){
    if(str.length>maxlength){
        var str2=str.slice(0,maxlength);
        newstr=str2+'...';
        console.log(newstr)
    }else{
        console.log(str)
    }
}
truncate("hello, this is hunger valley,", 10);//輸出hello, thi...
truncate("hello world", 20)//輸出hello world

10 . 什么是 json?什么是 json 對(duì)象?什么是 json 對(duì)象字面量?什么是 JSON內(nèi)置對(duì)象?

  • JSON是JavaScript Object Notation的縮寫(xiě),它是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON語(yǔ)法是JS對(duì)象表示語(yǔ)法的子集。
    (1)數(shù)據(jù)在名稱(chēng)/值對(duì)中;
    (2)數(shù)據(jù)由逗號(hào)分隔;
    (3)花括號(hào)保存對(duì)象;
    (4)方括號(hào)保存數(shù)組。
  • JSON對(duì)象是符合JSON語(yǔ)法規(guī)則的值?;疽弦韵乱?guī)則:
    ( 1 ) 復(fù)合類(lèi)型的值只能是數(shù)組或?qū)ο螅荒苁呛瘮?shù)、正則表達(dá)式對(duì)象、日期對(duì)象。
    ( 2 ) 簡(jiǎn)單類(lèi)型的值只有四種:字符串、數(shù)值(必須以十進(jìn)制表示)、布爾值和null
    ( 3 ) 字符串必須使用雙引號(hào)表示,不能使用單引號(hào)
    ( 4 ) 對(duì)象的鍵名必須放在雙引號(hào)里面
    ( 5 ) 數(shù)組或?qū)ο笞詈笠粋€(gè)成員的后面,不能加逗號(hào)
  • JSON對(duì)象字面量就是一種簡(jiǎn)單的描述及聲明方式。如:
    var a = {name : 'Mike', age : 3};
  • JSON是JS中的內(nèi)置對(duì)象,提供了JSON.parse( )(將字符串轉(zhuǎn)化為JSON對(duì)象)和JSON.stringify( )(將JSON對(duì)象轉(zhuǎn)化為字符串)等方法。

11 . 如何把JSON 格式的字符串轉(zhuǎn)換為對(duì)象?如何把對(duì)象轉(zhuǎn)換為 JSON 格式的字符串?

  • parse:把字符串轉(zhuǎn)化為JSON對(duì)象
  • stringify:把JSON對(duì)象轉(zhuǎn)化為字符串
//JSON字符串轉(zhuǎn)為對(duì)象
var str = ' {"name":"aaa","age":21}'
JSON.parse(str)

//對(duì)象轉(zhuǎn)為JSON字符串
var obj = {
    "name":"aaa",
    "age":20
}
JSON.stringify(obj);
- 學(xué)習(xí)總結(jié)

上面這些知識(shí)點(diǎn)看起來(lái)瑣碎,實(shí)際上是從工作實(shí)踐中抽離出來(lái)的,這些就是經(jīng)常被談?wù)摰摹富竟Α?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容