引用类型的值,即对象,是引用类型的一个实例。
○ new + 构造函数 -> 创建新对象var 变量名 = new 引用类型名(); 变量名.属性0名 = .......; 变量名.属性1名 = .......;
○使用“对象字面量” (属性名可以使用字符串)
var 变量名 = { 属性0名 :...., 属性1名 :...., 属性2名 :.... };
- 在ECMAScript中,引用类型是一种数据结构,将数据和功能组织在一起,也被称为对象定义。不具备传统的面向对象语言所支持的类和接口等基本结构。
- 访问对象属性的两种方法:
○点表示法: 对象名.属性名
○方括号表示法: 对象名[“属性名”/变量名(被赋值属性名)]
【方括号表示法的属性名要用字符串形式,可以包含非字母非数字 】
除非要用变量来访问属性,一般使用点表示法。
【引用类型】
1. Object
2. Array
3. Date
4. RegExp
5. Function
6. 基本包装类型
- Boolean
- Number
- String
7. 单体内置对象
- Global
- Math
【Object】
Object是 一个基础类型,其他类型都从Object继承了基本行为。
【Array】
在另一篇博文中
【Date】
创建方法
var time = new Date(参数);
参数可为:
1.Date.parse("月份名 日数,年数") 或者 Date.parse("月份名/日数/年数")
2.Date.UTC(年数,月份数-1,日数,时数,分数,秒数)
【参数如果不填,默认获取当前日期和时间。】
var time1 = new Date();
console.log(time1.toLocaleString()); //2017-5-23 10:54:57
var time2 = new Date(Date.parse("May 23,2017"));
或者var time2 = new Date(Date.parse("5/23/2017"));
console.log(time2.toLocaleString());//2017-5-23 00:00:00
var time3 = new Date(Date.UTC(2017,4,23,10,23,21));
console.log(time3.toUTCString());//Tue, 23 May 2017 10:23:21 GMT
//获取不同的时间格式的几种方法
var time4 = new Date();
console.log(time4.toDateString()); //Tue May 23 2017
console.log(time4.toTimeString()); //11:00:30 GMT+0800 (中国标准时间)
console.log(time4.toLocaleTimeString()); //11:00:30
console.log(time4.toUTCString()); //Tue, 23 May 2017 03:00:30 GMT
Date()也常用来计算时间差
var start = Date.now(); //获得当前的毫秒数
var end = Date.now(); //获得当前的毫秒数
var time = end - start; //求时间差
【RegExp】
创建方法
1.使用构造函数:var reg = new RegExp("正则表达式","标志"); (需要双重转义)
2.使用字面量:var reg =/正则表达式/标志;
*标志:表明正则表达式的行为
g:全局模式(global),应用所有的字符串,而不是发现第一个匹配项就停止
i:忽略大小写(ignoreCase)
m:多行模式(multiline),在一行末尾时会继续查找下一行
*需要用'\'转义的元字符:
()[]{}\^$|?*+.
var text = "car or bAr or far OR Cat?";
var pattern1 = /.ar/gi; 或者 var pattern1 = new RegExp("\.ar","gi"); //匹配一ar结尾的字符长度为3的字符串
while( (result = pattern1.exec(text) ) != null){
console.log(result);
}
//[ 'car', index: 0, input: 'car or bAr or far OR Cat?' ]
//[ 'bAr', index: 7, input: 'car or bAr or far OR Cat?' ]
//[ 'far', index: 14, input: 'car or bAr or far OR Cat?' ]
实例方法
reg.exec(“待匹配的字符串”) //返回一个数组,包含匹配的字符串、与捕获组匹配的字符串、
匹配项在字符串中的位置index、待匹配的字符串input。
reg.test(“待匹配的字符串”) //返回true(匹配)或false(不匹配)
构造函数的属性
RegExp.input 或 RegExp.$_ 最近一次待匹配的字符串
RegExp.lastMatch 或 RegExp["$&"] 最近一次的匹配项
RegExp.lastParen 或 RegExp["$+"] 最近一次匹配的捕获项
RegExp.leftContent 或 RegExp["$`"] 最近一次匹配项左边的字符串
RegExp.rightContent 或 RegExp["$'"] 最近一次匹配项右边的字符串
RegExp.multline 或 RegExp["$*"] 是否所有表达式都使用多行模式
RegExp.$1 ~ RegExp.$9 第1个捕获组~第9个捕获组
【Function】
*每个函数都是Function的实例,所以函数也是对象,也拥有方法。函数名实际上是一个指向函数对象的指针,不会与某个函数绑定,一个函数可能会有多个函数名,因为可以有多个指针指向同一对象。
*不带()的函数名是访问函数指针,带()的函数名是调用函数。
方法的定义
1.使用函数声明语法: function 函数名(参数){…….}
2.使用函数表达式: var 函数名 = function(参数){……];
3.使用构造函数: var 函数名 = new Function(“参数”,“函数体”); // Function构造函数可以
接收任意数量的参数,最后一个参数始终视为函数体。不推荐,因为该语法会导致解析两次代码,影响性能。
*【解析器对函数声明和函数表达式的读取顺序不同。解析器会在代码执行之前通过“函数声明提升过程”,读取并将函数声明添加到执行环境中。在对代码求值时,JavaScript引擎在第一遍会声明函数并将其放在源代码树的顶部。而函数表达式必须等到解析器执行到它所在的代码行才会被解释执行。】
内部两个特殊对象:
- arguments (类数组对象,包含传入函数中的所有参数)
- arguments .callee //指向该arguments对象的函数,可以解除函数体内的代码与函数名的耦合状态。
- arguments .callee.caller //保存 调用当前函数的 函数的引用,如果在全局环境下调用,返回null
- arguments .caller //始终返回undefined
function factorial(num){
if(num <= 1){
return 1;
}
else{
return num*factorial(num-1);
或者
return num*arguments.callee(num-1);//better,因为可以接触代码与函数名之间的耦合性
}
}
console.log(factorial(5)); //120
function outer(){
inner();
}
function inner(){
console.log(arguments.callee.caller); //输出调用inner()的函数
}
outer(); //[Function: outer]
- this
this引用的是函数执行的环境对象
函数属性
- 函数名.length //返回函数希望接收的参数个数
- 函数名.prototype
函数方法
1.函数名.apply(运行函数的作用域,参数数组(可以是Array的实例/arguments对象)) //在特定的作用域中调用函数,即设置函数体内this对象的值。
function sum(num1,num2){
return num1+num2;
}
function applySum(num1,num2){
return sum.apply(this,arguments);
或者
return sum.apply(this,[num1,num2]);
}
console.log(applySum(10,10)); //20
2.函数名.call(运行函数的作用域,参数1,参数2……) //在特定的作用域中调用函数,即设置函数体内this对象的值。
function sum(num1,num2){
return num1+num2;
}
function callSum(num1,num2){
return sum.call(this,num1,num2); //每个参数要逐个列举出来
}
console.log(callSum(10,10)); //20
-----------------------------------------------------
window.color = "red";
var o = {color: "blue"};
function showColor(){
console.log(this.color);
}
showColor(); //red
showColor.call(this); //red
showColor.call(window); //red
showColor.call(o); //blue
3.var 新函数名 = 函数名.bind(对象); //创建一个该函数的实例,且该实例的this值为对象。
新函数名();
window.color = "red";
var o = {color: "blue"};
function showColor(){
console.log(this.color);
}
var newShowColor = showColor.bind(o);
newShowColor(); //blue
【基本包装类型】
在另一篇博文中
【单体内置对象】
内置对象:由ECMAScript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。有Object、Array、String、Global、Math
【Global】
所有在全局作用域中定义的属性和函数,最终都是Global的属性。
URI编码方法
- encodeURI() 用 %20 替换URI的空格,主要用于整个URI
- encodeURIComponent() 替换所有非字母数字字符,由于会将URI本身的特殊符号://都替换掉,所以该方法主要用于URI的某一段
URI解码方法
- decodeURI()
- decodeURIComponent()
eval(“要执行的Js代码xx”)
要执行的代码的作用域链==执行该行代码的作用域链,所以在eval作用域中可以引用xx中的变量
【Math】
属性
Math.E | 常量e |
---|---|
Math.LN10 | 10的自然对数 |
Math.LN2 | 2的自然对数 |
Math.LOG2E | 以2为底e的对数 |
Math.LOG10E | 以10为底e的对数 |
Math.PI | π |
Math.SQRT1_2 | 根号2的倒数 |
Math.SQRT2 | 根号2 |
方法
- 求最大最小:
- Math.min(一系列数字) or Math.min.apply(Math,数组)
- Math.max(一系列数字) or Math.man.apply(Math,数组)
- 舍入方法
- Math.ceil() 入
- Math.floor() 舍
- Math.round() 四舍五入
console.log(Math.ceil(2.1)); //3
console.log(Math.floor(2.8));//2
console.log(Math.round(2.5));//3
产生随机数方法:
Math.random(); //返回一个【0,1)的数 随机数 = Math.floor(random()*可能值的总数 + 第一个可能的值 )
公式方法:
- Math.abs(数字); //返回数字的绝对值
- Math.exp(n); //返回e的n次幂
- Math.pow(数字,n); //返回数字的n次幂
- Math.log(m); //返回m的自然对数
- Math.sqrt(数字); //返回数字的开根
- Math.acos(数字); //返回数字的反余弦值
- Math.asin(数字); //返回数字的反正弦值
- Math.atan(数字); //返回数字的反正切值
- Math.atan2(y,x); //返回y/x的反正切值
- Math.cos(数字); //返回数字的余弦值
- Math.sin(数字); //返回数字的正弦值
- Math.tan(数字); //返回数字的正切值