字符串與JSON

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

  • 對(duì)于HTTP協(xié)議而言,html、css、js、json是符合相應(yīng)語(yǔ)法的字符串
    • 用戶訪問(wèn)頁(yè)面時(shí),瀏覽器根據(jù)用戶請(qǐng)求的路徑,向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器根據(jù)判斷路徑返回給瀏覽器對(duì)應(yīng)的字符串,同時(shí)也返回給瀏覽器Content-Type值。
      • Content-Type=text/html,瀏覽器把返回的字符串以HTML的語(yǔ)法規(guī)則進(jìn)行解析;
      • 當(dāng)HTML中有<link rel="stylesheet" href="" />,瀏覽器再向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器返回字符串和Content-Type=text/css,瀏覽器把返回的字符串以CSS語(yǔ)法進(jìn)行解析;
      • 當(dāng)HTML中有<script src="" />,瀏覽器向服務(wù)器發(fā)起請(qǐng)求,服務(wù)器返回字符串和Content-Type=text/javascript,瀏覽器把字符串以JS語(yǔ)法進(jìn)行解析

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

<dl class="product"><dt>女裝</dt><dd>短款</dd><dd>冬季</dd><dd>春裝</dd></dl>

var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function getTplStr(data){
    var arr = [];
    arr.push('<dl class="product">');
    arr.push('<dt>' + prod.name + '</dt>');
    for(var key in data.styles) {
        arr.push('<dd>' + prod.styles[key] + '</dd>');
    }
    arr.push('</dl>');
    return arr.join('');
}

var result = getTplStr(prod);  //result為下面的字符串
console.log(result);

2、寫出兩種以上聲明多行字符串的方法

例如:

var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'
這段字符串很長(zhǎng),如何多行優(yōu)雅的顯示

  • 如果長(zhǎng)字符串必須分成多行,可以在每一行的尾部使用反斜杠
var longString = "Long \
long \
long \
string";
longString
// "Long long long string"

加了反斜杠以后,原來(lái)寫在一行的字符串,可以分成多行,效果與寫在同一行完全一樣。反斜杠的后面必須是換行符,而不能有其他字符(比如空格),否則會(huì)報(bào)錯(cuò)

  • 連接運(yùn)算符(+)可以連接多個(gè)單行字符串,用來(lái)模擬多行字符串
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';
  • 利用多行注釋,生成多行字符串的變通方法
(function () { /*
line 1
line 2
line 3
*/}).toString().split('\n').slice(1,-1).join('\n')
// "line 1 line 2 line 3"

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

var str = 'hello\\饑人谷';//補(bǔ)全代碼
console.log(str);

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

var str = 'jirengu\nruoyu'
console.log(str.length)//'13',\n被當(dāng)做換行符,在此處進(jìn)行了換行,不計(jì)入字符串

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

function palindrome(str) {
    var str2 = str.split('').reverse().join('');
    if (str2 === str && str != ''){
        console.log('該字符串是回文');
    }else {
        console.log('該字符串不是回文');
    }
}

palindrome('abcdcba');//'該字符串是回文'
palindrome('abcdcbb');//'該字符串不是回文'

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

function statistics(str) {
   var dict = {};
   for(var i = 0; i < str.length; i++){
       if(dict[str[i]]){
           ++dict[str[i]];
       }else{
           dict[str[i]] = 1;
       }
   }
   var count = 0;
    var maxValue;
    for(var key in dict){
        if(dict[key] > count){
            maxValue = key;
            count = dict[key];
        }
    }
    console.log(maxValue,count);
}
var str = 'hello,wjt';
statistics(str);//'l,2'

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

function camelize(str) {
    var arr = [];
    arr = str.split('-');
     for(var i = 1; i < arr.length; i++){
         arr[i] = arr[i].split('');
         arr[i][0] = arr[i][0].toUpperCase();
         arr[i] = arr[i].join('');
     }
     str = arr.join('');
     return str;
}
camelize("background-color") == 'backgroundColor'//'true'
camelize("list-style-image") == 'listStyleImage'//'true'

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

function ucFirst(str) {
    var arr = [];
    arr = str.split(' ');
    for(var i = 0; i < arr.length; i++){
        arr[i] = arr[i].split('');
        arr[i][0] = arr[i][0].toUpperCase();
        arr[i] = arr[i].join('');
    }
    str = arr.join(' ');
    console.log(str);
}
ucFirst("hunger hunger hunger");//'Hunger Hunger Hunger'

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

function truncate(str, maxlength) {
    if(maxlength < str.length){
        if(maxlength < 3){
            str = str.slice(0,maxlength);
            return str + "...";
        }
        str = str.slice(0,maxlength-3);
        return str + "...";
    }else if(maxlength >= str.length){
        return str;
    }
}

function truncate(str, maxlength) {
    if(str.length <= maxlength){
        return str;
    }else {
        if(maxlength > 3){
            maxlength -= 3;
        }
        var truncted = str.substr(0,maxlength);

        return truncted + "...";
    }
}

truncate("hello, this is hunger valley,", 10) == "hello, thi...";//'true'
truncate("hello world", 20) == "hello world"http://'true'

10、什么是 JSON格式數(shù)據(jù)?JSON格式數(shù)據(jù)如何表示對(duì)象?window.JSON 是什么?

  • 什么是 JSON格式數(shù)據(jù)?
    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個(gè)子集。
  • JSON格式數(shù)據(jù)如何表示對(duì)象?
    {"name": "Byron", "age": "24"}
  • window.JSON 是什么?
    用于判斷瀏覽器是否兼容JSON的用法

JSON 對(duì)象不被舊版本瀏覽器支持。可以把下面代碼放到腳本的開(kāi)始位置,這樣就可以在那些沒(méi)有原生支持 JSON 對(duì)象的瀏覽器(比如IE6)中使用 JSON 對(duì)象。
以下算法是對(duì)原生 JSON對(duì)象的模仿

if (!window.JSON) {
  window.JSON = {
    parse: function(sJSON) { return eval('(' + sJSON + ')'); },
    stringify: (function () {
      var toString = Object.prototype.toString;
      var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
      var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'};
      var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
      var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g;
      return function stringify(value) {
        if (value == null) {
          return 'null';
        } else if (typeof value === 'number') {
          return isFinite(value) ? value.toString() : 'null';
        } else if (typeof value === 'boolean') {
          return value.toString();
        } else if (typeof value === 'object') {
          if (typeof value.toJSON === 'function') {
            return stringify(value.toJSON());
          } else if (isArray(value)) {
            var res = '[';
            for (var i = 0; i < value.length; i++)
              res += (i ? ', ' : '') + stringify(value[i]);
            return res + ']';
          } else if (toString.call(value) === '[object Object]') {
            var tmp = [];
            for (var k in value) {
              if (value.hasOwnProperty(k))
                tmp.push(stringify(k) + ': ' + stringify(value[k]));
            }
            return '{' + tmp.join(', ') + '}';
          }
        }
        return '"' + value.toString().replace(escRE, escFunc) + '"';
      };
    })()
  };
}

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

  • 如何把JSON 格式的字符串轉(zhuǎn)換為 JS 對(duì)象?
var str = '{"name": "wjt", "age": "22", "sex": "female"}';
var obj = {};
obj = JSON.parse(str);
  • 如何把 JS對(duì)象轉(zhuǎn)換為 JSON 格式的字符串?
var obj = {
    name: 'wjt',
    age: '22',
    sex: 'female'
};
var str = JSON.stringify(obj);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 0、對(duì)于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是什么? HTML就是符合HTML語(yǔ)法的字...
    怎么昵稱閱讀 1,632評(píng)論 0 3
  • 0、對(duì)于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是什么? 1.對(duì)于HTTP協(xié)議而言,htm...
    saintkl閱讀 587評(píng)論 0 0
  • 1、使用數(shù)組拼接出如下字符串 代碼如下: 2、寫出兩種以上聲明多行字符串的方法 例如: 這段字符串很長(zhǎng),如何多行優(yōu)...
    annynick閱讀 235評(píng)論 0 0
  • 使用數(shù)組拼接出如下字符串 var prod = {name: '女裝',styles: ['短款', '冬季', ...
    jamesXiao_閱讀 283評(píng)論 0 0
  • 1.使用數(shù)組拼接出如下字符串 };```function getTpl(data){var arr = "";fo...
    湖衣閱讀 323評(píng)論 0 0