JavaScript基础语法5
如果你想成为一名优秀的java架构师,看这里 → 乐字节免费公开课(腾讯课堂)
如需要跟多资料请点击右侧(记住入群暗号:66) → 这是一条不归路,有秃头风险,请慎重选择!
函数
函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值。<font color="red">函数也是对象。</font>
函数的定义
有三种函数定义的方式:函数声明语句、函数定义表达式、Function构造函数
函数声明语句
function 函数名([参数列表]){ }例如:function foo(){ console.log(1);} foo();
该种方式定义的函数具有声明提升的效果
foo(); function foo(){ console.log(1);} // 变量声明提升console.log( a ); var a = 2;
函数定义表达式
以表达式方式定义的函数,函数的名称是可以不需要的
var 变量名 = function ([参数列表]) { }变量名();例如:var fun = function(){ console.log("Hello");}fun();
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式,因为赋值语句的等号右侧只能放表达式。
Function构造函数
Function构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则列举出了新函数的参数。
var add = new Function('x','y','return (x + y)');// 等同于function add(x, y) { return (x + y);}add();
<font color="red">注意:</font>
- js中的函数没有重载,同名的函数,会被后面的函数覆盖。
- js中允许有不定数目的参数,后面介绍arguments对象
函数的参数、调用和return语句
参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数,定义时的参数称为形参,调用时的参数称为实参
- 实参可以省略,那么对应形参为undefined
- 若函数形参同名(一般不会这么干):在使用时以最后一个值为准。
- 可以给参数默认值:当参数为特殊值时,可以赋予默认值。
- 参数为值传递,传递副本 ;引用传递时传递地址,操作的是同一个对象。
// 调用函数时,实参可以省略,则对应形参为undefinedfunction add(a , b) { console.log(a + "+" + b + "=" + (a + b));}add(3,4,5)//3+4=7add(1);//1+undefined=NaNadd();//undefined+undefined=NaN// 若函数形参同名(一般不会这么干):在使用时以最后一个值为准function add2(a , a) { console.log(a);}add2(1,2);// 给参数默认值function defaultValue(a){ a = a || "a"; return a;}console.log(defaultValue());function f(a){ //若参数a不为undefined或null,则取本身的值,否则给一个默认值 (a !== undefined && a !== null) ? a = a : a = 1; return a;}console.log(f());// 值传递var num = 12;function change(n) { n = 30;}change(num);console.log(num);// 引用传递var obj = {name: "tom"};function paramter(o) { o.name = 2;}paramter(obj);console.log(obj.name);// 给形参o赋予了新的数组var obj2 = [1, 2, 3];function paramter2(o){ o = [2, 3, 4]; o[1] = 3;}paramter2 (obj2);console.log(obj2)
函数的调用
1. 常用调用方式
函数名([实参]);
存在返回值可以变量接收,若接收无返回值函数则为undefined。
2. 函数调用模式
function add(a,b){ return a+b;} var sum = add(1,2) console.log(sum);
3. 方法调用模式
var o = { m: function(){ console.log(1); } };o.m();
return
函数的执行可能会有返回值,需要使用return语句将结果返回。return 语句不是必需的,如果没有的话,该函数就不返回任何值,或者说返回 undefined。
作用:
1. 在没有返回值的方法中,用来结束方法。
2. 有返回值的方法中,一个是用来结束方法,一个是将值带给调用者。
函数的作用域
函数作用域:全局 (global variable) 和 局部 (local variable)
1. 全局变量与局部变量同名问题
var box =1; // 全局变量function display(box){ var box = 3; // 此处box与全局变量box没有关系,这里的box为传递的参数,相当于新声明的局部变量 var b = 2; // 局部变量 console.log("box-->" + box);}display();// b 不能访问console.log("b-->" + b);
2. 在函数中定义变量时,若没有加var关键字,使用之后自动变为全局变量
function fun(){ a = 100;}fun();alert(a);
内置对象
Arguments 只在函数内部定义,保存了函数的实参 Array 数组对象 Date 日期对象,用来创建和获取日期 Math 数学对象 String 字符串对象,提供对字符串的一系列操作
String
◦ charAt(idx) 返回指定位置处的字符◦ indexOf(Chr) 返回指定子字符串的位置,从左到右。找不到返回-1◦ substr(m,n) 返回给定字符串中从m位置开始,取n个字符,如果参数n省略,则意味着取到字符串末尾。◦ substring(m,n) 返回给定字符串中从m位置开始,到n位置结束,如果参数n省略,则意味着取到字符串末尾。◦ toLowerCase() 将字符串中的字符全部转化成小写。◦ toUpperCase() 将字符串中的字符全部转化成大写。◦ length 属性,不是方法,返回字符串的长度。
Math
◦ Math.random() 随机数◦ Math.ceil() 向上取整,大于最大整数◦ Math.floor() 向小取整,小于最小整数String
Date
// 获取日期◦ getFullYear() 年◦ getMonth() 月◦ getDate() 日◦ getHours() 时◦ getMinutes() 分◦ getSeconds() 秒// 设置日期◦ setYear()◦ setMonth()◦ setDate()◦ setHours()◦ setMinutes()◦ setSeconds()◦ toLoacaleString() 转换成本地时间字符串
<font color="red">说明:</font>
- getMonth():得到的值:0~11(1月~12月)
- setMonth():设置值时0~11
- toLocaleString():可根据本地时间把 Date 对象转换为字符串,并返回结果。
对象
对象(object)是 JavaScript 的核心概念,也是最重要的数据类型。JavaScript 的所有数据都可以被视为对象。JavaScript 提供多个内建对象,比如 String、Date、Array 等等。对象是带有属性和方法的特殊数据类型。
简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成。通过JavaScript我们可以创建自己的对象。 JavaScript对象满足的这种”键值对”的格式我们称为JSON格式,以后会见得非常多,即伟大的JSON对象。
{键:值, 键2:值2,...}
对象的创建
JS 创建自定义对象,主要通过三种方式:字面量形式创建对象、通过new Object对象创建 、通过Object对象的create方法创建对象。
字面量形式创建
var 对象名 = {};//创建一个空的对象var 对象名 = {键:值,键2:值2,...} var obj = { 'name' : 'hello', age : 12, sayHello : function () { console.log("我是对象中的方法"); }, courses : { javase : 4, javascript : 3 }, isLike : true, members : [ {name : "小红",age : 20}, {name : "小绿",age : 22}, {name : "小蓝",age : 27}, {name : "小黄"} ]};
通过new Object创建
var 对象名 = new Object(); // 创建一个空的对象var obj = new Object();obj.name = 'zs';obj.age = 18;console.log(obj);
通过Object对象的create方法创建
var 对象名 = Object.create(null); var obj = Object.create(null);obj.name = 'ls';obj.gender = trueconsole.log(obj); var objn = Object.create(obj);objn.age = 18;console.log(objn);console.log(objn.gender)
对象的序列化和反序列化
序列化即将JS对象序列化为字符串,反序列化即将字符串反序列化为JS对象。JS中通过调用JSON方法,可以将对象序列化成字符串,也可以将字符串反序列化成对象 。
// 序列化对象,将对象转为字符串JSON.stringify(object);
// 反序列化,将一个Json字符串转换为对象。JSON.parse(jsonStr);
this
this是JavaScript语言的一个关键字。
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
在函数中使用this
在函数中使用this属于全局性调用,代表全局对象,通过window对象来访问。
function test () { this.x = 1; console.log(this.x);}test();console.log(x); // 相当于定义在全局对象上的属性 var x = 10;console.log(x) // 10function test (){ console.log(this.x) // 10 this.x = 1; console.log(this.x) // 1 console.log(this)}test();console.log(x); // 1console.log(this);
在对象中使用this
在对象中的函数使用this,代表当前的上级对象。
var obj = { name : '张三', age : 20, sayHello : function () { console.log(this.name) console.log(this) }}obj.sayHello();
function test (){
console.log(this.x) // 10this.x = 1;console.log(this.x) // 1console.log(this)
}
test();
console.log(x); // 1
console.log(this);
##### 在对象中使用this 在对象中的函数使用this,代表当前的上级对象。
var obj = {
name : '张三',age : 20,sayHello : function () { console.log(this.name) console.log(this)}
}
obj.sayHello();