JavaScript-对象类型object type

一.函数对象Function

1.创建Function对象(3种方式)

ECMAScript(javaScript)函数实际上是功能完整的对象
//1.普通函数
function fun1(sName) {
	alert("Hello " + sName);
}
fun1(111);

//2.变量=匿名函数
var fun2 = function(sName) {
	alert("Hello " + sName);
}	
fun2(222);

//3.Function类直接创建函数
var fun3 = new Function("sName", 
			"alert(\"Hello \" + sName);");
fun3(333);

//4.函数名只是指向函数的变量,所以可以把函数作为参数传递给另一个函数!
var hello = function(sName) {
	alert("Hello " + sName);
}	
function call(helloFun, arg) {
	helloFun(arg);
}

call(hello, "World");	//输出"Hello World"

注意: 尽管可以使用new  Function()创建函数对象,但最好不要使用,
因为它定义函数比用传统方式慢,不过,所有函数都应看作Function类的实例对象!

2.length属性

//属性length 声明了函数期望的参数个数
function doAdd(iNum) {
	alert(iNum);
}

function sayHi() {
	alert("Hi");
}

alert(doAdd.length); //输出 "1"
alert(sayHi.length); //输出 "0"

注意: 无论函数定义了几个参数, ECMAScript都可以接受任意多个参数(最多25个)	
例如:
	function fun1(a){
		console.log(2*a);			
	}		
	fun1(8,9,11); // 16
	fun1();       // NaN

3.valueOf()和toString()方法

Function对象也有与所有对象共享的valueOf()和toString()方法,
这两个方法都是返回函数的源码,在调试时尤其有用!
function doAdd(iNum) {
	alert(iNum);
}
console.log(doAdd.toString());

4.arguments参数: 函数运行时的参数封装

function fun1(){
	alert(arguments.length); //参数个数
	var count = 0;		
	for(var i =0; i<arguments.length ; i++)			
		count += arguments[i];		
	alert(count);
}

fun1(1,2);    //3
fun1(1,2,3,4);//10
fun1();       //0

5.void运算符

用于拦截函数返回值
<a href="javaScript:void(hello())">点击</a>
function hello(){
	alert("hello");
	return 1;
}

onClick事件替代href属性
<a href="javaScript:void(0)" onClick = "alert('hello')">点击</a>

二.包装对象(Boolean,Number,String)

null和undefined没有对应包装对象!
对于原始类型的布尔值,数字,字符串,只要引用它们的属性和方法,原始类型会临时转为对象类型,
一旦引用结束,对象就会销毁,这个临时创建的对象就是包装对象!

1.Boolean对象

Boolean对象表示两个值:true或false
如果省略参数或参数为0,-0,null,"",undefined,NaN,则布尔值为false,否则为true(即使参数是字符串"false")
当作为一个构造函数(带有new)时,new Boolean()将参数转换成一个布尔值,并返回包含该值的Boolean对象。
当作为一个函数(不带有new)时,Boolean()只将参数转换成一个原始布尔值,并返回这个值!
Boolean 对象包括 toString 和 valueOf 方法!

2.Number对象

只读属性:
	MAX_VALUE:1.7976931348623157e+308 //JavaScript能够处理的最大数
	MIN_VALUE:5e-324                  //JavaScript能够处理的最小数
	NEGATIVE_INFINITY:-Infiny         //负无穷
	POSITIVE_INFINITY:Infinity        //正无穷
	NaN:NaN //非数字
	
格式化或转换:
	toExponential //指数形式-科学计数法表示(参数:指定小数位数)
	toFixed       //四舍五入指定小数位数
	toPrecision   //超出指定位数时转换为指数形式-科学计数法(参数:指定数字的总位数)
	toString      //Number字符串
	valueOf       //Number原始值
	
var n = 3.14159;
console.log(n.toFixed(2)) //临时创建Number对象, 输出3.14

3.String对象

length
charAt
charCodeAt   //unicode编码
concat
fromCharCode
indexOf
lastIndexOf
match
replace
search
slice
split
substr
substring
toLowerCase
toUpperCase

var str = "hello world"
console.log(str.length) //临时创建String对象, 输出11

三.全局对象

全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。
通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性!

escape() 不能直接用于URL编码,把字符编码成Unicode十六进制形式(加%),不对ASCII字母,数字和标点符号@*_+-./编码
unescape() 解码
encodeURI() 把URL编码成UTF-8十六进制形式(加%),不对ASCII字母,数字和URL特殊符号;/?:@&=+$,#编码!
decodeURI() 解码
encodeURIComponent() 同上,但会对URL特殊符号;/?:@&=+$,#编码!
decodeURIComponent() 解码
例如:
	console.log(escape("中文"))                    //Unicode十六进制形式,  输出%u4E2D%u6587
	console.log(encodeURI("中文"))                 //UTF-8十六进制形式,  输出%E4%B8%AD%E6%96%87
	console.log(encodeURI(";/?:@&=+$,#"))          //URL特殊符号不编码,  输出;/?:@&=+$,#
	console.log(encodeURIComponent(";/?:@&=+$,#")) //URL特殊符号被编码UTF-8十六进制形式,  输出%3B%2F%3F%3A%40%26%3D%2B%24%2C%23
	
parseInt() 字符串转换成整数,从左到右依次转换,直到到不能转换为止
parseFloat() 字符串转换成浮点数
例如:
	console.log(parseInt("12a"));    //12
	console.log(+"12a");             //NaN
	console.log(parseInt("a12"));    //NaN	
	console.log(parseFloat("3.14")); //3.14
	console.log(parseInt("3.14"));   //3
	console.log(parseFloat("3.14a"));//3.14
	console.log(parseInt("3.14a"));  //3
	
isFinite()	检查某个值是否为有穷大的数
isNaN()	    检查某个值是否为NaN
例如:
	var num = NaN;
	if(isNaN(num))
		alert("是NaN");
	else
		alert("不是NaN");

eval() 解析计算JavaScript字符串,作为脚本代码来执行
例如:
	var x=10
	alert(eval("x+1")); //11
	
String(object) 把对象转换为字符串
Number(object) 把对象转换为数字

四.数组对象Array

1.创建数组对象(元素类型任意不同,长度动态变化)

var a = new Array(); 
a[0]="a";       
a[1]=3.14;
a[2]=true;
a[3]=null;
a[4]=undefined;
a[5]=new Object();

var a = new Array("a",3.14,true,null,undefined,new Object());		
var a = ["a",3.14,true,null,undefined,new Object()];

2.Array对象的方法/函数

concat(array2,array3,...) 连接两个或更多的数组,并返回结果
copyWithin(target, start, end)	从数组的指定位置拷贝元素到数组的另一个指定位置中
every(function(currentValue,index,arr), thisValue)	检测数值元素的每个元素是否都符合条件
fill(value, start, end)	使用一个固定值来填充数组
filter(function(currentValue,index,arr), thisValue)	检测数值元素,并返回符合条件所有元素的数组
find(function(currentValue, index, arr),thisValue)	返回符合传入测试(函数)条件的数组元素
findIndex(function(currentValue, index, arr), thisValue)	返回符合传入测试(函数)条件的数组元素索引
forEach(function(currentValue, index, arr), thisValue)	数组每个元素都执行一次回调函数
indexOf(item,start)	搜索数组中的元素,并返回它所在的位置
join(separator)	默认逗号作为分隔符,把数组的所有元素放入一个字符串
lastIndexOf(item,start)	返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索
map(function(currentValue,index,arr), thisValue)	通过指定函数处理数组的每个元素,并返回处理后的数组
pop()	删除数组的最后一个元素并返回删除的元素
push(item1,item2,...)	向数组的末尾添加一个或更多元素,并返回新的长度
reduce(function(total, currentValue, currentIndex, arr), initialValue)	将数组元素计算为一个值(从左到右)
reduceRight(function(total, currentValue, currentIndex, arr), initialValue)	将数组元素计算为一个值(从右到左)
reverse()	反转数组的元素顺序
shift()	删除并返回数组的第一个元素
slice()	选取数组的的一部分,并返回一个新数组
some(function(currentValue,index,arr),thisValue)	检测数组元素中是否有元素符合指定条件
sort(sortfunction)	对数组的元素进行排序
splice(index,howmany,item1,...)	从数组中添加或删除元素
toString()	把数组转换为字符串,并返回结果
unshift(item1,item2,...)	向数组的开头添加一个或更多元素,并返回新的长度
valueOf()	返回数组对象的原始值

五.日期对象Date

1.创建Date对象

var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

2.Date对象的方法/函数

getDate()	从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay()	从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear()	从 Date 对象以四位数字返回年份。
getHours()	返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds()	返回 Date 对象的毫秒(0 ~ 999)。
getMinutes()	返回 Date 对象的分钟 (0 ~ 59)。
getMonth()	从 Date 对象返回月份 (0 ~ 11)。
getSeconds()	返回 Date 对象的秒数 (0 ~ 59)。
getTime()	返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset()	返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate()	根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay()	根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCFullYear()	根据世界时从 Date 对象返回四位数的年份。
getUTCHours()	根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMilliseconds()	根据世界时返回 Date 对象的毫秒(0 ~ 999)。
getUTCMinutes()	根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCMonth()	根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCSeconds()	根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
parse()	返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate()	设置 Date 对象中月的某一天 (1 ~ 31)。
setFullYear()	设置 Date 对象中的年份(四位数字)。
setHours()	设置 Date 对象中的小时 (0 ~ 23)。
setMilliseconds()	设置 Date 对象中的毫秒 (0 ~ 999)。
setMinutes()	设置 Date 对象中的分钟 (0 ~ 59)。
setMonth()	设置 Date 对象中月份 (0 ~ 11)。
setSeconds()	设置 Date 对象中的秒钟 (0 ~ 59)。
setTime()	setTime() 方法以毫秒设置 Date 对象。
setUTCDate()	根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCFullYear()	根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours()	根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMilliseconds()	根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
setUTCMinutes()	根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCMonth()	根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCSeconds()	setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。
toDateString()	把 Date 对象的日期部分转换为字符串。	
toISOString()	使用 ISO 标准返回字符串的日期格式。
toJSON()	以 JSON 数据格式返回日期字符串。
toLocaleDateString()	根据本地时间格式,把 Date 对象的日期部分转换为字符串。
toLocaleTimeString()	根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleString()	据本地时间格式,把 Date 对象转换为字符串。
toString()	把 Date 对象转换为字符串。
toTimeString()	把 Date 对象的时间部分转换为字符串。
toUTCString()	根据世界时,把 Date 对象转换为字符串。
UTC()	根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。
valueOf()	返回 Date 对象的原始值。

六.正则对象RegExp

1.创建RegExp对象

var patt = new RegExp(pattern, modifiers);
var patt = /pattern/modifiers;

修饰符modifiers:
	i  执行对大小写不敏感的匹配
	g  执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)
	m  执行多行匹配
	
例如:
	var reg = new RegExp("h","gi");
	var reg = /h/gi;

2.RegExp对象的方法/函数

compile 编译正则表达式
exec    检索字符串中指定的值,返回找到的值,并确定其位置
test    检索字符串中指定的值,返回true或false

例如:
	var reg = /h/gi;
	alert(reg.exec("hello")) //h
	alert(reg.test("hello")) //true

3.支持正则表达式的String对象的方法/函数

search	检索与正则表达式相匹配的值,返回索引值
match	找到一个或多个正则表达式的匹配,返回匹配值
replace	替换与正则表达式匹配的子串
split	把字符串分割为字符串数组

例如:
var str = "hello world"
alert(str.search(/o/g))
alert(str.match(/or/g))
alert(str.replace(/l/g, "i"))
alert(str.split(/l/g))

简书: http://www.jianshu.com/p/dbfc9c247032
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/78145855
GitHub博客: http://lioil.win/2017/09/30/js-object.html
Coding博客: http://c.lioil.win/2017/09/30/js-object.html