字符串
字符串的值改變后,二者不相關。例如:
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ì)都是符合某種語法的字符串
-
使用數(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)
-
一行字符串,多行顯示
例如:var str='abcncb'
var str='abc\
ncb\
'//abc ncb
var str='abc'
+'ncb'//abcncb
-
輸出結果為字符串
var str='hello\\\\饑人谷'
console.log(str)
-
代碼輸出
var str = 'jirengu\nruoyu'
console.log(str.length)//輸出13
原因:\n是轉義字符,在js中占一個字節(jié)。
-
寫一個函數(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)
-
統(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)
-
寫一個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)
-
寫一個 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)
-
寫一個函數(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)
- json格式數(shù)據(jù):null 字符串 數(shù)字 布爾 對象 數(shù)組
json格式的數(shù)據(jù)表示對象:- 復合類型的值只能是數(shù)組或是對象,不能是函數(shù)、正則表達式對象、日期對象。
- 對象的鍵名必須放在雙引號里面
- 數(shù)組或者對象最后一個成員的后面不能加逗號
例如:
var json1={"name":"ruoyu","age":"24"}
window.JSON是用于判斷瀏覽器是否兼容json的用法,例如ie8版本以上才內(nèi)置支持json.parse方法,對此常見這樣的寫法:
if (window.JSON){
jsonObj2=JSON.parse(json);
}else{
}
- js對象與json字符串的轉換
var str='{"name":"ruoyu","age":30}'
var obj=JSON.parse(str)//轉化為對象
console.log(JSPN.stringify(obj))//轉換為json字符串