字符串與json

字符串

字符串的值改變后,二者不相關。例如:

var str='hello jirengu'
var str1=str
str='world'
console.log(str1)//'hello jirengu'

表示

  • 就是0個或者多個排在一起的字符,放在單引號或者雙引號之間。
  • 單引號字符串的內(nèi)部,可以使用雙引號,雙引號字符串的內(nèi)部可以使用單引號。
  • 如果非要在單引號字符串的內(nèi)部使用單引號(或者雙引號的內(nèi)部使用雙引號),就必須在內(nèi)部的單引號(或雙引號)前面加反斜杠用來轉義。例如:'did she say 'hello''中的反斜杠使其引號失去原有的意義,變成普通字符。\n代表換行。如果想要\n就要\n
  • 字符串默認只能寫一行,寫成多行就會報錯。
'a
b'

如果必須分成一行,可以在每行的尾部使用反斜杠(多行分成一行)

'hello\
world\//注意反斜杠后面不要加空格
';

例如如果是html的話:

<div>\
  <a >饑人谷</a>\
</div>

也可以這樣:

var longstring='log'
                        +'logg'
                        +'logg';

也可以這樣:

var fn=function(){/*
  <div>
    <a >饑人谷</a>
  </div>
  */
}
console.log(fn.toString())//可以打印出函數(shù)體

所以由多行變成一行可以這樣:

(function(){/*
  line1
  line2
*/}).toString().split('\n').slice(1,-1).join('\n')//line1 line2 line3

反斜杠

\是轉義符需要包含反斜杠需要再加一個反斜杠對自身進行轉義\。用于把特殊字符變成普通字符。

字符串操作

  • 字符串連接
var str10='hello'//可以加空格,打印出來就有空格
var str11='world'
console.log(str10+str11)//訪問:console.log(str10.length)
console.log(str10.length-1);console.log(str10[0]);編碼console.log(str10.charCodeAt(0))
  • 字符串截取(兩種方法)
var str='hello world'
var sub1=str.subStr(1,3)//第一個是開始位置,第二個是長度
var sub2=str.subString(1,3)//第一個是開始位置,第二個是結束位置。長度為第二個-第一個
  • 查找
var str='hello my world';
var s1=str.search('my')//6,找不到則為-1
var s2=str.replace('my','your');//11
var s3=str.match('my')//返回匹配的數(shù)組
  • 大小寫
var str='hello'
str.toUpperCase();
str.toLowerCase();
  • 切割
var str='hello'
str.split('')//['h','e','l','l','o']以空字符串作為切割,則得到一個數(shù)組里面每一項。
var str='abcdefg'//倒過來
str.split('')
str.split('').reverse()
str.split('').reverse().join('')//string.split執(zhí)行的操作與Array.join執(zhí)行的操作是相反的。寫成函數(shù)就是function isReverse(str){
  return str===str.split('').reverse().join()
}

json基礎知識

json語法

json語法可以表示簡單值、對象、數(shù)組三種類型的值。json必須使用雙引號。沒有undefind。

對象

json與js有2點不同。首先沒有聲明變量,其次沒有末尾的分號。json的屬性名必須加雙引號。
js:

var obj={
    name: 'xueting',
    age: 22,
};

json:

{
    "name":'xueting',
    "age":21;
}

讀取屬性:

var obj={
  "name":"jirengu",
  "age": 30,
  "2435":"hello"
}//obj.name可以,但是obj.2435就不可以了。obj.后面必須是下劃線或者字符,可以這樣寫:obj['2435'],obj['age']。也可以賦值obj.name=''rouyu'
json數(shù)組

json數(shù)組采用的就是js中的數(shù)組字面量的形式。不同的是沒有變量和分號。

["title":'professional',"educition":3]

解析與序列化

序列化(篩選數(shù)據(jù))

用到了JSON.stringify()把一個js對象序列化為一個JSON字符串。
可以接收三個參數(shù),第二個參數(shù)是個過濾器,可以是數(shù)組也可以是函數(shù)。第三個參數(shù)可選,表示是否在JSON中保留縮進。
如果是數(shù)組:

var book={
    title:'professional',
    edition:3,
    year:2011
}
var jsonText=JSON.stringify(book,[title,edition])//輸出的結果就是title和edition兩個屬性。

如果是函數(shù):

var xiaoming={
    name:'小明',
    age:14,
    skills:['js','java','pyhon']
}
JSON.stringify(xiaoming,function  convert(key,value){
    if(typeof value==='string'){
        return value.toUpperCase();
    }
    return value;
}//{"name":'小明',"age":14,"skill":['JS','JAVA','PYHON']}

這樣輸出的時候,會成一行,所以要使用縮進輸出。JSON.stringify(xiaoming,null,'')
還可以使用toJSON()方法來直接返回JSON應該序列化的數(shù)據(jù):

var xiaoming={
    name:'小明',
    age:14,
    height:1.65,
    toJSON:function(){
        return{
         'name':this.name,
         'age':this.age
        };
    }
};
JSON.stringify(xiaoming);//{"name":'小明',"age":14}

解析選項

JSON.parse()可以將json解析為js。
可以接收兩個參數(shù),第二個參數(shù)可以是函數(shù)。這個函數(shù)被稱為還原函數(shù)。如果還原函數(shù)返回undefind則表示將從結果中刪除相應的鍵。和序列化差不多。

var obj=JSON.parse("name":'小明',function(key,value){
    if(key==='name'){
        return value+'同學'
    }
    return value;
});
console.log(obj)//{name:'小明同學'}

在日期中的應用:
首先看下面的例子:

var book={
    title:'professional',
    releaseDate:new Date(2012,11)
}
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText);
console.log(bookCopy.releaseDate)//2012-11如果是console.log(bookCopy.getFullYear())就會出錯。
var book={
    title:'professional',
    edition:3,
    year:2012,
    releaseDate:new Date(2012,11)
}
var jsonText=JSON.stringify(book);
var bookCopy=JSON.parse(jsonText,function(key,value){
    if(key=='releaseDate'){
        return new Date(value)
    }else{
        return value;
    }
});
alert(bookCopy.releaseDate.getFullYear())

實例

對于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是符合某種語法的字符串

  1. 使用數(shù)組拼出字符串

    var prod = {
    name: '女裝',
    styles: ['短款', '冬季', '春裝']
};
function get(data){
    var arr='<dl class="product">';
    arr+='<dt>+data[name]+</dt>';
    for(var i=0;i<data.styles.length;i++){
      arr+='<dd>'+data['styles'][i]+'</dd>';
     
};
    arr+='</dl>';
    return arr
};
var result=get(prod);
console.log(result)
  1. 一行字符串,多行顯示

例如:var str='abcncb'

var str='abc\
 ncb\
'//abc  ncb
var str='abc'
+'ncb'//abcncb
  1. 輸出結果為字符串

var str='hello\\\\饑人谷'
console.log(str)
  1. 代碼輸出

var str = 'jirengu\nruoyu'
console.log(str.length)//輸出13

原因:\n是轉義字符,在js中占一個字節(jié)。

  1. 寫一個函數(shù),判斷一個字符串是回文字符串

例如判斷str=abcdcba是回文字符串

var arr1='aabaa';
function isReverse(str){
    newstr=str.split(' ').reverse().join()
    if(newstr===str){
      console.log('是回文字符串')
}else{
    console.log('不是回文字符串')
}
}
var arr=isReverse(arr1)
console.log(arr)
  1. 統(tǒng)計字符串中出現(xiàn)頻率最高的字符

var arr='hellojirenguhellohhhh';
var obj={};
for(i=0;i<arr.length;i++){
    if(obj[arr[i]]){
    ++obj[arr[i]];
}else{
    obj[arr[i]]=1;
}
}
var count=0;
var maxValue
for (key in obj){
    if(obj[key]>count){
     count=obj[key] 
     maxValue=key
}
}
console.log(count,maxValue)
  1. 寫一個camelize函數(shù),把my-short-string形式的字符串轉化成myShortString形式的字符串

var a='background-color'
    var b='list-style-image'
function camelize(str){
    return str.split('-').join('')
}
var arr=camelize(a)
var arr1=camelize(b)
console.log(arr)
console.log(arr1)
  1. 寫一個 ucFirst函數(shù),返回第一個字母為大寫的字符

var arr='hunger';
function ucFirst(str){
    var str=str[0].toUpperCase()+arr.substr(1,5);
    return str
}
var a=ucFirst(arr);
console.log(a)
  1. 寫一個函數(shù)truncate(str, maxlength), 如果str的長度大于maxlength,會把str截斷到maxlength長,并加上...

function truncate(str,maxlength){
    if(str.length>maxlength){
    var arr=str.substring(0,maxlength)+'...';
    return arr
}
}
var a=truncate("hello, this is hunger valley,", 10)
console.log(a)
  1. json格式數(shù)據(jù):null 字符串 數(shù)字 布爾 對象 數(shù)組
    json格式的數(shù)據(jù)表示對象:
    1. 復合類型的值只能是數(shù)組或是對象,不能是函數(shù)、正則表達式對象、日期對象。
    2. 對象的鍵名必須放在雙引號里面
    3. 數(shù)組或者對象最后一個成員的后面不能加逗號
      例如:
var json1={"name":"ruoyu","age":"24"}

window.JSON是用于判斷瀏覽器是否兼容json的用法,例如ie8版本以上才內(nèi)置支持json.parse方法,對此常見這樣的寫法:

if (window.JSON){
    jsonObj2=JSON.parse(json);
}else{

}
  1. js對象與json字符串的轉換
var str='{"name":"ruoyu","age":30}'
var obj=JSON.parse(str)//轉化為對象
console.log(JSPN.stringify(obj))//轉換為json字符串
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

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

  • 0、對于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是什么? HTML就是符合HTML語法的字...
    怎么昵稱閱讀 1,620評論 0 3
  • 1,對于 HTTP 協(xié)議而言,HTML、CSS、JS、JSON 的本質(zhì)都是什么? 對于HTTP協(xié)議而言,html、...
    進擊的前端_風笑影閱讀 828評論 0 0
  • 1.使用數(shù)組拼接出如下字符串 };```function getTpl(data){var arr = "";fo...
    湖衣閱讀 318評論 0 0
  • 什么是JSON?什么是JSON語言?JSON 語言如何表示對象?window.JSON 是什么?如何把JSON 格...
    LeeoZz閱讀 500評論 0 0
  • 感恩國家越來越富強,政策越來越親民,使父母的晚年生活有足夠的保障;感恩在照顧父母的每個環(huán)節(jié)中所有工作人員的幫忙,特...
    天門金珠瑜伽閱讀 95評論 0 0