1.三种特殊的引用类型:Boolean、String、Number
每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型的对象,从而让我们能调用一些方法来操作这些数据
我们不建议直接实例化包装好的引用类型,原因在于在使用typeof和instanceof检测基本类型数值时结果完全不同
var numberObject = new Number(10);
var numberValue = 10;
alert(typeof numberObject);//object
alert(typeof numberValue);//number
alert(numberObejct instanceof Number);//true
alert(numberValue instanceof Number);//false
在使用typeof操作符检测基本类型数值时,始终都会返回number
而在测试Number对象时,则会返回Object。类似的,Number对象是Number类型的实例,而基本类型的数值不是。
2.Number:valueOf(),返回对象表示的基本类型的数值
toLocalString()返回字符串形式的数值
toString()返回字符串形式的数值,可以传递一个表示基数的参数
toFixed()按照指定的小数位返回数值的字符串表示,适合用于处理货币值
toExponential()返回以指数表示(也称e表示法)表示的数值的字符串形式,接收一个参数用于指定小数位数
toPrecision()可能返回固定大小的格式,也可能返回指数格式,具体规则是看哪种格式最合适,接收一个参数用于表示数值的所有数字的位数
3.String:
属性:
length:表示字符串中含有字符的长度。
方法:
(1)charAt()和charCodeAt()
这两个方法都接受一个参数,即一个基于0的字符位置,其中charAt()方法以单字符的形式返回给定位置的那个字符
var stringValue = "Hello,world!";
alert(stringValue.charAt(1));//"e"
alert(stringValue.charCodeAt(1));//"101"
这个例子输出的"101"也就是"e"的字符编码
(2)concat():用于将一或多个字符串拼接,可以接受若干个参数,表示拼接若干个字符串,返回拼接得到的新字符串,不影响原来的字符串
另外,使用"+"操作符也可以用于字符串拼接
(3)slice()、substr()、substring()
基于子字符串创建新字符串
这三个方法都返回基于被操作字符串的一个子字符串
接受一到两个参数:第一个参数表示子字符串的开始位置,第二个参数表示子字符串到哪里结束
如果不指定第二个参数,则表示将字符串的末尾作为结束位置。
这三个方法不会修改字符串本身的值
substr第二个参数指定的是返回的字符串个数
var stringValue = "hello world";
alert(stringValue.slice(3));//"lo world"
alert(stringValue.substring(3));//"lo world"
alert(stringValue.substr(3));//"lo world"
alert(stringValue.substring(3,7));//"lo w"
alert(stringValue.substr(3,7));//"lo worl"
alert(stringValue.slice(3,7));"lo w"
假如传入负值
slice()始终将负值与字符串长度相加
substr()将第一个负值参数与字符串长度相加,第二个转换为0
substring始终将负值参数转换为0
(4)字符串位置方法 indexOf()和lastIndexOf()
这两个方法都是从一个字符串搜索给定的子字符串,然后返回子字符串的位置,如果没有找到字符串则返回-1
区别在于:indexOf()从开头向后搜索子字符串,而lastIndexOf()从字符串的末尾向前搜索子字符串。
这两个方法都可以接受可选的第二个参数,表示从哪个位置开始搜搜
例如:查找字符串中所有的"o"字符
var stringValue = "Lorem ipsum dolor sit amet,consectetur adipisicing elit";
var position = new Array();
var pos = stringValue.indexOf("o");
while(pos>-1){
position.push(pos);
pos = stringValue.indexOf("o",pos+1);
}
alert(position);//3,24,32,35,52
(5)trim()方法:这个方法会创建一个字符串的副本,删除前置以及后缀的空格,然后返回结果
trimLeft(),trimRight()分别用于删除字符串开头和末尾的空格(Firefox3.5+、Safri5+、Chrome8+支持)
(6) 大小写转换
toLowerCase()和toUpperCase()
toLoaclLowerCase()和toLocalUpperCase()是针对特定地区的实现
(7)字符串的模式匹配方法
var text = "cat,bat,sat,fat";
var pattern = /.at/;
//var matches = text.match(pattern);
alert(matches.index);//0
alert(matches[0]);//cat
alert(pattern.lastIndex);//0
4.单体内置对象
内置对象就是我们不必显式的实例化的对象,在程序执行之前就已经存在
例如:Object,Array,String,Math和Global
Global对象:不属于任何其他对象的属性和方法,最终都属于Global对象,例如:全局属性和方法
方法:(1)URI编码方法
Global的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器
有效的URI中不能包含某些特殊的字符,例如空格,URI编码方法可以用特殊的utf-8编码替换所有无效的字符,从而让浏览器能够理解和接受
encodeURI()编码的结果是除了空格被替换为%20,其他的字符都原封不动,它不会对本身包含的术语URI的特殊字符进行编码,例如冒号,正斜杠,问号和井号
encodeURIComponent()则会对它发现的任何非标准字符进行编码
因此,对于整个URI可以使用encodeURI(),但是对于URI中的某一段只能使用encodeURIComponent()
(2)解编码方法
decodeURI()对应encodeURI()
decodeURIComponent()对应encodeURIComponent()
decodeURI()可以将%20替换为空格但是不会对%23进行替换,因为%23代表#,它是有encodeURIComponent()编码而来
因此,第一次调用decodeURI(),%20被替换为空格,第二次调用encodeURIComponent()得到了一个未经转义的字符串
(但是这个字符串并不是一个有效的URI)
URI方法能够编码所有的Uicode字符
(3)eval()方法
这个方法就像是一个完整的ECMAScript解析器,它只接受一个参数,即要执行的ECMAScript代码
eval("alert('hi')");
等价于alert("hi");
eval()执行的代码被认为是包含此次调用的执行环境的一部分,因此被执行的代码具有与该执行环境相同的作用域链
这意味着eval()可以引用在包含环境中定义的变量
var msg = "123";
eval("alert(msg)");
eval("function sayHi(){alert('hi')}");
sayHi();//在调用eval的外部代码中引用这个函数
在严格模式下,在外部访问不到eval()中创建的任何变量或函数
属性:特殊的值undefined、NaN、以及Infinity都是Global对象的属性。
Window对象:ECMAScript虽然没有指出如何直接访问Global对象,
但web浏览器都是将这个全局对象作为window对象的一部分加以实现的
因此,在全局作用域中声明的所有变量和函数,就都成为了window对象的属性
javascript中的window对象除了扮演ECMAScript规定的Global对象的角色外,还承担了很多倍的任务
Math对象:保存数学公式和信息的一个公共位置
属性:Math.E, 自然对数的底数,即常量e的值
Math.LN2 2的自然对数
Math.LOG2E 以2为底e的对数
Math.LOG10E
Math.PI π的值
Math.SQRT1_2 1/2的平方根
Math.SQRT2 2的平方根
方法:
(1)min()和max()方法
min()和max()用于确定一组数值中的最小值和最大值
var max = Math.max(3,54,32,16);
要找到数组中的最大值或最小值,可以像下面这样使用applay()方法
var value = [1,2,3,4,5,6,7,8];
var max = Math.max.applay(Math,value);
这个例子最关键的是将Math作为第一个参数传入,从而正确的设置this值,然后可以将任何数组作为第二个参数
(2)舍入方法
Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数
Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数
Math.round()执行标准舍入,即四舍五入为最接近的整数
(3)random()方法
值 = Math.floor(Math.random()*可能的值+第一个可能的值)
或者:值 = Math.floor(Math.random()*(最大值-最小值+1)+最小值)
例如:得到一个1到10之间的数值
var num = Math.floor(Math.random()*10+1);
得到一个2到10之间的数
var num = Math.floor(Math.random()*9+2);
(4)其他方法
Math.abs(num):返回绝对值
Math.exp(num):返回Math.E的num次幂
Math.log(num):返回num的自然对数
Math.pow(num,power):返回num的power次幂
Math.sqrt(num):返回num的平方根
Math.acos(x):返回x的反余弦值
Math.asin(X):返回x的反正弦值
Math.atan(x):返回x的饭正切值
Math.sin(x):返回x的正弦值
Math.cos(x):返回x的余弦值
Math.tan(x):返回x的正切值
总结:
1. 对象再javaScript中被称为引用类型的值,而且有一二写内置的引用类型的可以用来创建特定的对象
2. Object是一个基础类型,其他类型都是从Object继承了基本的行为
3. Array类型是一组值的有序列表,同时还提供了操作和装换这些值的计算功能,
如操作方法concat,slice,splice,
栈方法和队列方法pop,push,shift,unshift
重排序方法reverse,sort
转换方法toString,toLocalString,valueOf
位置方法indexOf,lastIndexOf
迭代方法every、some、filter、map、foreach、
归并方法reduce,reduceRight
4. 函数实际上Function类型的实例,因此函数也是对象,而这一点正是javascript最有特色的地方。
由于函数是对象,所以函数也拥有方法,可以用来增强其行为
因为有了基本包装类型,所以javascript中的基本类型值可以被当做对象来访问。三种最基本的包装类型:Boolean,String,Number
5.在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作
操作基本类型值的语句一旦结束,就会立即销毁新创建的包装对象
6.在所有代码执行之前,已经有两个对象存在,Global和Math对象
在大多数ECMAScript实现中都不能直接访问Global对象;不过,Web浏览器实现了承担其角色的window对象