JavaScript基础(二):函数、引用类型

一:函数

       1,函数定义

       函数作用:通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。

       函数是对象,函数名是指针

//函数定义方式一:函数声明
function function_name (argument) {
	// body... 
}

//函数定义方式二:函数表达式(匿名函数)
var function_name = function(argument){
	// body...
}

       函数可通过return语句来实现返回值,函数在执行完return语句后停止并立即退出,位于return语句之后的任何代码永远都不会执行。未指定返回值的函数返回的是一个特殊的undefined值

       ①ECMAScript中的参数在内部是用一个数组来表示的,在函数体内可通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数
       ②arguments.length 可以获知有多少个参数传递给了函数
       ③因函数参数是以一个包含任意个值的数组的形式传递的,所以ECMAScript中没有函数签名的概念,因此ECMAScript函数不能重载

       2,执行环境与作用域链

       执行环境:定义了变量或函数有权访问的其他其他数据,决定了它们各自的行为

       执行环境:全局执行环境 -->window对象
                局部执行环境 -->函数体




       作用域链:保证对执行环境有权访问的所有变量和函数的有序访问

       tips:如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境

      3,闭包函数

       待更新...


二:引用类型

       1,Object类型

// 创建Object实例的方式一:
var person1 = new Object();
person1.name = "rock";
person1.age = 18;

// 创建object实例的方式二:对象字面量表示法
// 注意:用逗号分隔,最后一个属性后面不能添加逗号
var person2 = {
	name:"mike",
	age:27
};

// 访问对象属性的方法:
console.log(person1.name)
console.log(person1["age"])
console.log(person2.name)
console.log(person2["age"])

       2,Array类型

       ECMAScript数组:数据的有序列表,每一项可以保存任何类型的数据

       ECMAScript数组的大小可以动态调整,即可以随着数据的添加自动增长以容纳新增数据。其项数保存在length属性中

// 创建数组方式一:使用Array构造函数
var colors = new Array();  //new 可省略
var colors = new Array(20);  //项数为20的数组
var colors = new Array("red");

// 创建数组方式二:使用数组字面量表示法
var colors = [];  //空数组
var colors = ["red","blue","green"];

       instanceof:确定一个值是哪种引用类型

var arr1 = [];
// 方式一:
if (arr1 instanceof Array){
	console.log("arr1 is a array");
}

// 方式二:IE9+开始支持
if (Array.isArray(arr1)){
	console.log("arr1 is a array");
}
       数组的toLocalSttring()、toString()和valueOf()默认以逗号分隔的字符串形式返回数组项。
       join()方法可以使用不同的分隔符来构建这个字符串。
var colors = ["red","green","blue"];
console.log(colors.toString());  //red,green,blue
console.log(colors.join(":"));  //red:green:blue
       队列方法:先进先出
       shift():移除数组中的第一个项并返回该项

       unshift():能在数组前端添加任意个项并返回新数组的长度

       栈方法:后进先出
       push():可接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度

       pop():从数组末尾移除最后一项,并返回移除的项

       重排序方法:
       reverse():反转数组项,颠倒其顺序

       sort():调用每个数组项的toString()方法,比较得到的字符串以确定如何排序,默认为升序

// 定义实现数组内数字降序排序的函数
function comparefn (v1,v2) {
	if (v1<v2){
		return 1;
	}else if(v1>v2){
		return -1;
	}else{
		return 0;
	}
}	
var arr1 = [6,9,1,3,8,2,0];
// arr1.sort();  //默认升序 [0, 1, 2, 3, 6, 8, 9]
arr1.sort(comparefn);   //[9, 8, 6, 3, 2, 1, 0]
console.log(arr1);
       操作方法:
       concat():基于当前数组中的所有项创建一个新数组
       这个方法会先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组
       slice():能基于当前数组中的一个或多个项创建一个新数组
       一个参数:返回从该参数指定位置开始到当前数组末尾的所有项
       两个参数:返回起始和结束位置之间的项(不包括结束位置的项)

       splice():删除--> 可删除任意数量的项;
                           两个参数:要删除的第一项的位置和要删除的项数
             插入-->3个及以上参数:起始位置、0(要删除的项数)、要插入的项
             替换-->3个及以上参数:起始位置、要删除的项数、要插入的项
       splice()方法返回一个数组,该数组包含从原始数组中删除的项(无删除项,则返回一个空数组)


       位置方法:使用全等操作  (IE9+开始支持)
       indexOf():从数组的开头开始向后查找,返回要查找的项在数组中的位置,没找到的情况下返回-1
       lastIndexOf():从数组的末尾开始向前查找,返回要查找的项在数组中的位置,没找到的情况下返回-1
       两个参数:要查找的项、查找起点位置(可选)

       归并方法:
       reduce():从数组的第一项开始,迭代数组的所有项,构建一个最终返回值
       reduceRight():从数组的最后一项开始,迭代数组的所有项,构建一个最终返回值

       3,Date类型

       Date类型使用自UTC1970年1月1日零时开始经过的毫秒数来保存日期

       parse():接收一个表示日期的字符串参数,返回1970年1月1日午夜到指定日期(字符串)的毫秒数

       UTC():参数为 年份,月份,天数,小时,分钟,秒(年份月份必需,月份是基于0的,即1月是0),根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数

       Date类型的valueOf()方法返回日期的毫秒表示,因此,可以方便使用比较操作符来比较日期值

var nowTime = new Date();
//不传参数:自动获得当前日期和时间
//传递参数:传入表示日期的毫秒数创建该特定日期和时间的日期对象
//Thu May 31 2018 19:56:20 GMT+0800 (中国标准时间)
console.log(nowTime.toLocaleString()); //2018/5/31 下午7:56:20

var time1 = new Date(Date.parse("May 31,2018")); 
// Thu May 31 2018 00:00:00 GMT+0800 (中国标准时间)
var time2 = new Date("May 31,2018"); //后台调用Date.parse()

var time3 = new Date(Date.UTC(2011,11,11,11,11,11));
//Sun Dec 11 2011 19:11:11 GMT+0800 (中国标准时间)
var time4 = new Date(2011,11,11,11,11,11);
//Sun Dec 11 2011 11:11:11 GMT+0800 (中国标准时间)

nowTime.getDate();  //31
nowTime.getDay();  //4   获取星期
nowTime.getFullYear(); //2018
nowTime.getMonth();  //4  获取月份,月份是基于0的,1月为0
nowTime.getHours();  //19
nowTime.getMinutes();  //56
nowTime.getSeconds();  //20
nowTime.getTime();  //1527768440026 

// 计算时间间隔:IE9+开始支持
var start = Date.now();
var stop = Date.now();
var result = stop - start;

// 替代方案
var start = +new Date();
var stop = +new Date();
var result = stop - star

       4,RegExp类型

       regular expression 正则表达式

// 字面量形式
var expression = /pattern/flags;

// 构造函数形式
var expression = new new RegExp(pattern, flags);
       flags:g -->全局模式,即模式将被应用于所有字符串
                  i -->不区分大小写模式
                 m -->多行模式

       模式中使用的所有元字符都必须转义:()[]{}\^$|?*+.

       方法:
       exec():接受一个参数,即要应用模式的字符串,返回包含第一个匹配项信息的数组(或null)

       test():接受一个字符串参数,返回true或false

       属性:
       lastIndex:表示开始搜索下一个匹配项的字符位置,从0算起
       index:匹配项在字符串中的位置

       input:应用正则表达式的字符串

       5,Function类型

//函数定义方式一:函数声明
// 解析器会率先读取函数声明,即函数声明提升
function function_name (argument) {
	// body... 
}

//函数定义方式二:函数表达式(匿名函数)
// 解析器执行到它所在的代码行才开始解释执行
var function_name = function(argument){
	// body...
}
       函数内部对象:
       arguments:主要用来保存函数参数
         arguments.callee  指向拥有这个arguments对象的函数;用于消除函数体内代码与函数名紧密耦合的现象
       this:引用的是函数执行的环境对象

       caller:保存着调用当前函数的函数的引用(全局中值为null)

       函数属性:length --函数接收的命名参数的个数

               prototype--保存引用类型所有实例方法的真正所在

       函数方法:在特定的作用域中调用函数,等于设置函数体内this对象的值
       apply() :参数--运行函数的作用域 、参数数组
       call():参数-- 运行函数的作用域 、参数 、参数

       bind():会创建一个函数的实例,其this值会被绑定到传给bing()函数的值上

       6,基本包装类型

       引用类型:使用new操作符创建,在执行流离开当前作用域之前都一直保存在内存中

       基本包装类型:后台自动创建,只存在于一行代码的执行瞬间,然后立即被销毁

       number类型

var numberObject = 10;
// 后台会自动创建number类型
var numberObject = new Number(10);
       方法:
       toFixed():按照指定的小数位返回数值的字符串表示
       toExponential():返回以指数表示法表示的数值的字符串形式

       toPrecision():返回toFixed()值或toExponential()值,看具体规则采用哪种格式最合适

       string类型

var stringObject = "hello"
// 后台会自动创建string类型
var stringObject = new String("hello");
       length属性:返回字符串中包含多少个字符

       可通过索引访问特定字符:StringValue[0]

       方法:
       charAt():接收一个参数,即基于0的字符位置;返回给定位置的字符
       charCodeAt():接收一个参数,即基于0的字符位置;返回给定位置字符的字符编码
       concat():拼接字符串,返回拼接得到的新字符串
       slice():切片,返回一个新子字符串;参数--子字符串的开始位置、结束位置(不含此位)
       substring():同slice()

       substr():返回一个新子字符串;参数--子字符串的开始位置、返回的字符个数

       indexOf():从前往后搜索,返回子字符串的位置;若不存在该子字符串,则返回值 -1
       lastIndexOf():从后往前搜索,返回子字符串的位置
       trim():去除前后的空格
       toLowerCase():转换成小写
       toUpperCase():转换成大写
       replace():替换,参数--被替换字符串、替换字符串

       Math对象

       Math.min():返回一组数值中的最小值
       Math.max():返回一组数值中的最大值

       舍入方法:
       Math.ceil():向上舍入
       Math.floor():向下舍入

       Math.round():标准的四舍五入

       Math.random():返回大于等于0且小于1的一个随机数
       Math.abs():返回绝对值

       Math.pow(x,y):返回x的y次幂

       从某个整数范围内随机选择一个值,公式如下:
       值 = Math.floor(Math.random()*可能值的总数 + 第一个可能的值)


猜你喜欢

转载自blog.csdn.net/hua1011161696/article/details/80520621