JavaScript对象分为:引用类型,基本包装类型以及内置对象
本文记录学习三个基本的包装类型值
- Boolean
- Number
- String
首先,本文是看了红宝书总结而来.
1 | var s1 = 'somethings text'; |
字符串不是对象,理应没有tosubstring方法,但是后台解释器会自动完成如下操作:
1 | var s1 = new String('somethings text'); |
实例化一个字符串对象,得到一个实例,实例拥有方法,调用实例的方法.最后直接销毁这个实例.
此类操作适合Boolean和Number
也就是说,它的生存周期是很短的,执行完一行则直接销毁,以后不能在用了,这就是基本包装类型和引用类型的实例的区别.
并且,建议不要直接使用显式的实例化方法,虽然可以,但是这不是最佳实践,结果会影响开发者和阅读者对代码的理解.让解释器去做这样的事情吧.
另外,对于布尔表达式的判断来说,任何对象都会被转化为true,所以常常有一些情景是值为false的Boolean对象的实例,用在了布尔判断中.
关于Number对象:1
2var num = new Number(10)
# 即可创建一个值为10的数字对象
Number类重写了toString等方法,可以指定返回几进制的字符串表示的值,例如:1
2var num = 10;
num.toString(2) # 返回的是'1010'二进制表示的字符串
另外,Number对象还提供了一些格式化方法:1
2
3
4var num = 10;
num.toFixed(2); // "10.00"
// 还有num.toExponential(int x) 格式化科学计数法
通过new实例化的对象,属于object 而直接赋值,让解释器处理的变量typeof为number/string/Boolean
String类型
string类型提供了很多方法,不只是JavaScript,基本上大多数的脚本语言,甚至编译型语言对字符串都会提供很多方法去操作字符串.
毕竟,对于字符串的处理的需求太频繁.
在JavaScript中,获取字符串某个下标位置的字符的方法为:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31string.charAt(int i) // 类似于python: string.index(int i)
string.charCodeAt(int i) // 返回此字符的字符编码
string.concat(string s) //这里作用是拼接字符串,不会修改原字符串的值,而是返回一个新的字符串
//让我想起tcl对list的处理,concat连接了多个list组合成一个list
# 可以说是创建了新的字符串,另外ECMAScript还有其他函数会创建新的字符串
string.substr()
string.substring()
# 以下三个函数都能截取字符串,区别在于对接收的参数的处理不同.
string.slice(int x, int y) //截断字符串,通过下标控制范围
# slice方法,参数可以是负数,并且可以视为将参数转化为字符串的范围内的整数和0,如果负数或者整数超过
# 字符串长度,则转化为长度值.
var str = '12345'
str.slice(-20,10) # 视为slice(0,5)
str.slice(-20,-30) # 第一个参数大于第二个参数,返回空字符串
str.slice(-2,-1) # 视为slice(length-2,length-1) 即 slice(3, 4)
# 默认范围都是从0到末尾字符串的
str.slice() //返回本身
str.substr(int start, int number) //第二个参数表示返回的字符个数,为0或者为负数都直接返回空字符串
str.substring(int start, int end) //以二者大值为end,小的值为start,负数转化为0,大小相等则返回空字符串
字符串查找
在python中,常用的判断语句:1
2if 'a' in 'bac':
pass
可以检查字符串是否在某个字符串中
在JavaScript中,检查子字符串的内置方法有两个:1
2
3string.indexOf(string s, int start) // 从start开始,从前往后查,查到返回位置下标,否则返回-1
string.lastIndexOf(string s, int start) // 从start开始,不过是从后往前查,查法一致
另外,其他通用函数:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30string.trim() 删除首尾的空格
// 大小写转换
string.toLowerCase()
string.toUpperCase()
// 当然,还有两个搜索和匹配的函数
string.search(regexp) // 返回第一个匹配的索引(首字母索引),或者-1
string,match(regexp) // 返回匹配数组
// 替换函数
string.replace(string s1, string s2)
// 替换函数的拓展,第二个参数是一个函数
// 用法在于此函数接受三个参数,第一个为模式的匹配项,第一个捕获组的匹配项,第2或者第n个
// 捕获组的匹配项
// 倒数第二个参数为匹配项在字符串中的位置,最后一个参数为原始的字符串本身
// 这个函数,返回一个字符串
String.prototype.capitalize(){
return this.replace(/(^|\s)([a-z])/g, function(match, pos1, pos2){
return p1 + p2.toUpperCase();
});
}
console.log("i am a loser".capitalize())
// 输出 I Am A Loser
最后几个符串的处理的方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16string.split()
// demo
var color = "red,black,pink"
var color_arr = color.split(',')
// 很简单,将指定逗号作为分隔符,将字符串进行分割,返回一个处理好的数组,必须添加分隔符,无默认值
var stringvalue = "yellow";
alert(stringvalue.localeCompare('zata')) // yellow less than zata , return 负数
alert(stringvalue.localeCompare('a')) // yellow large than a, return 正数
// 相等返回0
// 只有一个问题,这个方法不同的浏览器的实现是不一样的,也许是-1,所以需要一点设计
alert(String.fromCharCode(104,101,108,108,111)) // 通过ascii码的值,返回字符串 hello