①字符串是不可变的,数组是可变的。字符串不可变是指字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串。而数组的成员函数都是在其原始值上进行操作。
②数组有一个字符串没有的可变更成员函数reserve()。
方法一:先将字符串转化为数组,待处理完后再将结果转化回字符串:
split()方法将一个字符串拆成字符并返回一个数组
reverse()方法使数组反转
join()方法将数组中的所有元素边接成一个字符串
var a="foo"
var b=a.split("")//转化为字符串数组
.reverse()//进行反转
.join("")//数组中的字符拼接回字符串
方法二:把字符串中的字符倒序存入数组,再将数组转化为字符串:
var newString = []
for(var i = a.length-1,j = 0i >= 0i --,j ++){
newString[j] = a[i]
}
newString.join()
/*1.用浏览器内部转换器实现html转码*/
htmlEncode:function (html){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement ("div")
//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
(temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html)
//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
var output = temp.innerHTML
temp = null
return output
},
/*2.用浏览器内部转换器实现html解码*/
htmlDecode:function (text){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement("div")
//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
temp.innerHTML = text
//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
var output = temp.innerText || temp.textContent
temp = null
return output
},
/*3.用正则表达式实现html转码*/
htmlEncodeByRegExp:function (str){
var s = ""
if(str.length == 0) return ""
s = str.replace(/&/g,"&")
s = s.replace(/
s = s.replace(/>/g,">")
s = s.replace(/ /g," ")
s = s.replace(/\'/g,"'")
s = s.replace(/\"/g,""")
return s
},
/*4.用正则表达式实现html解码*/
htmlDecodeByRegExp:function (str){
var s = ""
if(str.length == 0) return ""
s = str.replace(/&/g,"&")
s = s.replace(/</g,"<")
s = s.replace(/>/g,">")
s = s.replace(/ /g," ")
s = s.replace(/'/g,"\'")
s = s.replace(/"/g,"\"")
return s
}
}
toString()使用对象的toString函数把对象转化为字符串。
// plain objectvar obj = {}
obj.toString() // 返回"[object Object]" // 基本数据封装类
var num = new Number(2.2)
num.toString() // 返回"2.2" // 数组
var arr = [1,2,3]
arr.toString() // 返回"1,2,3" // 正则对象
var reg = new RegExp('\\d')
reg.toString() // 返回"/\d/" // 自定义对象
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.toString = function () {
return 'name is ' + this.name + 'and age is ' + this.age
}
var p = new Person('Scott', 31)
p.toString() // 返回"name is Scott and age is 31"
JSON.stringify
使用json序列化的方式把对象转换为字符串,该方式会把一个对象中所有标记为
enumerable的属性序列化为json格式的字符串。
// plain objectvar obj = {name: 'Scott', age: 31}
JSON.stringify(obj) // 返回"{"name":"Scott","age":31}" // 基本数据封装类
var num = new Number(2.2)
JSON.stringify(num) // 返回"2.2" // 数组
var arr = [1,2,3]
JSON.stringify(arr) // 返回"[1,2,3]" // 自定义类型
function Person(name, age, maritalStatus) {
this.name = name
this.age = age
// 由于婚姻状况是隐私的属性,不希望序列化字符串的时候暴露给他人,因此这里设置属性为不可枚举的
Object.defineProperty(this, 'maritalStatus', {
enumerable: false,
configurable: false,
writable: true,
value: maritalState || 'unknown'
})
this.maritalStatus = maritalStatus
}
var p = new Person('Scott', 31, 'married')
// 序列化的时候是没有maritalStatus的
JSON.stringify(p) // 返回"{"name":"Scott","age":31}"
// 但是maritalStatus确实真实存在于对象中的
p.maritalStatus // 返回"married"