对象字面量
使用对象字面量,可以在构建对象时,直接指定对象的属性;
语法:{属性名:属性值;属性名:属性值;…}
属性名与属性值是以键值对的方式存在的;属性名与属性值之间用:连接,属性之间用逗号隔开
var obj = {
name: "张三",
age: 28,
//最后一个属性后面没有属性了,就不用加逗号了,不然报错很难找
sex: "男"
};
console.log(obj);
对象字面量的属性名可以加引号也可以不加,建议不加;如果要使用一些特殊的名字,则必须加引号
函数
函数也是一个对象,函数可以保存一些代码在需要的时候可以直接调用
创建一个函数对象
// 创建一个函数对象
// 可以将要执行的代码以字符串的形式传递给构造函数
var fn = new Function("console.log('hello,hi');");
/*
封装到函数中的代码不会立即执行;函数中的代码会在函数调用的时候执行;
调用函数的语法:函数对象()
在调用函数时,函数中封装的代码会按照顺序执行
*/
使用函数声明来创建一个函数
语法:function fn() {}
<script>
// 括号里面的a,b可写可不写
function fn(a, b) {
console.log('hello');
console.log(a);
console.log(b);
}
//调用
fn(4, 5);
</script>
使用函数表达式来创建一个作对象
var 函数名=function([参数1,参数2,参3]){执行}
参数列表中的参数可以省略不写,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 定义一个用来求两个数之和的函数
// 在括号中指定一个或多个形参(形式参数),多个形式参数之间用逗号隔开
// 声明形参就是在函数内部声明了对应的变量
function getsun(a, b) {
var num = a + b;
console.log(num);
};
// 在调用函数时,可以在()中指定实参(实际参数),实参将会赋值给函数中对应的形参,函数的实参可以是任意的数据类型
// 调用函数时,解析器不会解析实参的类型
// 注意:是否有可能会接受到非法的参数,如果有可能则需要对参数进行类型的检查,
// 在调用函数时,解析器不会检查实参的数量,多余实参不会被赋值,
// 如果实参的数量少于形参的数量,则没有对应的形参将是undefined
//实参可以是对象,也可以是一个函数
getsun(4, 5);
</script>
</head>
<body>
</body>
</html>
函数的返回值
语法:return 值(可以使任意类型的值)
return 后的值将会作为函数的执行结果返回,可以定义一个变量来接收该结果,return之后就直接结束此次函数的执行,return之后的语句都不会执行
返回值可以是任意类型,可以是一个对象也可以是一个函数
如果return后面没有值就相当于返回一个undefined,如果函数中不写return,则也会返回undefined
<script>
function sum(a, b, c) {
var d = a + b + c;
return d;
}
var res = sum(a, b, c);
alert(res);
</script>
// 定义一个函数,判断一个数字是否是偶数,如果是返回true,否则返回false
/* function isOu(num) {
if (num % 2 == 0) {
return true
} else {
return false
}
} */
function isOu(num) {
return num % 2 == 0;
}
var res = isOu(10);
alert(res);
<script>
// 定义一个函数,可以根据半径计算一个圆的面积,并返回计算结果
function fn(r) {
var num = 3.14 * r * r;
return num;
}
var res = fn(6);
alert(res);
</script>
当参数过多时,可以将参数封装到一个对象中,然后通过对象传递
<script>
// 创建一个函数,可以在控制台中输出一个人的信息:名字,年龄,性别,来自哪里
/* function sayHi(name, age, gender, from) {
var str = "我叫" + name + ",我今年" + age + "岁了,我是一个" + gender + "生,我来自" + from;
return str;
}
var res = sayHi('zs', 24, '男', '中国'); */
var obj = {
name: 'zs',
age: 24,
gender: '男',
from: '中国'
}
function sayHi(obj) {
var str = "我叫" + obj.name + ",我今年" + obj.age + "岁了,我是一个" + obj.gender + "生,我来自" + obj.from;
return str;
}
var res = sayHi(obj);
function fun(a) {
console.log(a);
};
// fun(sayHi);
fun(sayHi(obj));
/*
fun(sayHi):括号里的sayHi没有被调用,所以fun的参数是使用sayHi函数对象,而不是返回值
fun(sayHi(obj)):括号里面的sayHi后面加了括号有了参数,说明已经被调用了。所以fun函数的参数是使用sayHi的返回值
*/
alert(res);
</script>
<script>
function fun() {
alert("函数开始执行了");
for (let i = 0; i < 5; i++) {
if (i == 2) {
// 退出当前循环
// break; //只输出0,1,
// 跳过本次循环,继续下个循环
// continue; //输出0,1,3,4,
// return直接结束整个函数
return; //后面的alert执行不了了
}
console.log(i);
}
alert("函数结束执行了");
}
fun();
function fun1() {
function fun2() {
alert('我是函数fun1里面的fun2函数');
}
// fun2();
return fun2;
}
fun1()();
</script>
立即执行函数
<script>
// 函数对象()
// 立即执行函数:该函数定义完之后,。立即被执行的函数;立即执行函数只会执行一次。
(function() {
alert("我是一个立即执行的匿名函数")
})();
// 传参
(function(a, b) {
console.log(a);
console.log(b);
})(123, 456);
</script>
函数和方法
<script>
// 创建对象
var obj = new Object();
// 向对象添加属性
obj.name = 'zs';
obj.age = 22;
// 对象的属性值可以是任何的数据类型,也可以是个函数
// 如果一个函数作为一个对象的属性保存,那么我们可以称这个函数是这个对象的方法
// 调用函数就是调用对象的方法(method)
obj.sayHi = function() {
console.log('我叫' + obj.name);
}
function fn() {
console.log(obj.name);
}
// 调用方法
obj.sayHi();
// 调用函数
fn();
// 只是名称上有区别,其他没有区别
</script>
枚举属性(for…in…)
<script>
var obj = {
name: 'zs',
age: 22,
gender: '男',
address: '中国'
};
// 枚举对象中的属性
// for...in 语句
/*
语法:
for(var n in obj){
}
in后面的对象有多少个属性,就会循环多少次;每次执行一次,就会将对象中的一个属性名赋值给变量
*/
for (const i in obj) {
console.log("属性名" + i); //name\age\gender\address
//获取obj中的属性值,[]中可以放变量
console.log(obj[n]);
}
</script>