字符串
字符串的值改变后,二者不相关。例如:
var str='hello jirengu'
var str1=str
str='world'
console.log(str1)//'hello jirengu'
表示
- 就是0个或者多个排在一起的字符,放在单引号或者双引号之间。
- 单引号字符串的内部,可以使用双引号,双引号字符串的内部可以使用单引号。
- 如果非要在单引号字符串的内部使用单引号(或者双引号的内部使用双引号),就必须在内部的单引号(或双引号)前面加反斜杠用来转义。例如:'did she say 'hello''中的反斜杠使其引号失去原有的意义,变成普通字符。\n代表换行。如果想要\n就要\n
- 字符串默认只能写一行,写成多行就会报错。
'a
b'
如果必须分成一行,可以在每行的尾部使用反斜杠(多行分成一行)
'hello\
world\//注意反斜杠后面不要加空格
';
例如如果是html的话:
<div>\
<a href='http://jirengu.com'>饥人谷</a>\
</div>
也可以这样:
var longstring='log'
+'logg'
+'logg';
也可以这样:
var fn=function(){/*
<div>
<a href='http://jirengu.com'>饥人谷</a>
</div>
*/
}
console.log(fn.toString())//可以打印出函数体
所以由多行变成一行可以这样:
(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')//返回匹配的数组
- 大小写
var str='hello'
str.toUpperCase();
str.toLowerCase();
- 切割
var str='hello'
str.split('')//['h','e','l','l','o']以空字符串作为切割,则得到一个数组里面每一项。
var str='abcdefg'//倒过来
str.split('')
str.split('').reverse()
str.split('').reverse().join('')//string.split执行的操作与Array.join执行的操作是相反的。写成函数就是function isReverse(str){
return str===str.split('').reverse().join()
}
json基础知识
json语法
json语法可以表示简单值、对象、数组三种类型的值。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数组
json数组采用的就是js中的数组字面量的形式。不同的是没有变量和分号。
["title":'professional',"educition":3]
解析与序列化
序列化(筛选数据)
用到了JSON.stringify()把一个js对象序列化为一个JSON字符串。
可以接收三个参数,第二个参数是个过滤器,可以是数组也可以是函数。第三个参数可选,表示是否在JSON中保留缩进。
如果是数组:
var book={
title:'professional',
edition:3,
year:2011
}
var jsonText=JSON.stringify(book,[title,edition])//输出的结果就是title和edition两个属性。
如果是函数:
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应该序列化的数据:
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。
可以接收两个参数,第二个参数可以是函数。这个函数被称为还原函数。如果还原函数返回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 协议而言,HTML、CSS、JS、JSON 的本质都是符合某种语法的字符串
-
使用数组拼出字符串
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中占一个字节。
-
写一个函数,判断一个字符串是回文字符串
例如判断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)
-
统计字符串中出现频率最高的字符
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函数,把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函数,返回第一个字母为大写的字符
var arr='hunger';
function ucFirst(str){
var str=str[0].toUpperCase()+arr.substr(1,5);
return str
}
var a=ucFirst(arr);
console.log(a)
-
写一个函数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格式数据:null 字符串 数字 布尔 对象 数组
json格式的数据表示对象:- 复合类型的值只能是数组或是对象,不能是函数、正则表达式对象、日期对象。
- 对象的键名必须放在双引号里面
- 数组或者对象最后一个成员的后面不能加逗号
例如:
var json1={"name":"ruoyu","age":"24"}
window.JSON是用于判断浏览器是否兼容json的用法,例如ie8版本以上才内置支持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字符串
网友评论