主要内容:
js数据类型,数组、对象、功能
- 数组的slice和splice()-实现对数组元素的新增,删除,替换
- 对象的for in遍历
- 函数中的IIFE:立即调用函数
流程控制:基本的if、switch、for、while
js对象的序列化json格式的字符串
1. 基本数据类型,数组、对象、功能
- 数组的slice和splice()-实现对数组元素的新增,删除,替换
- 对象的for in遍历
- 函数中的IIFE:立即调用函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>数据类型与访问方式</title>
</head>
<body>
<script>
// 1. 原始类型
// number 数值
var grade = 88;
// string 字符串
var username = "peter";
// bool: 布尔
var flag = false;
// 类型检查 typeof
// console.log(typeof grade, typeof username, typeof flag);
// 2. 特殊类型
// null 空对象
var title = null;
// console.log(typeof title);
// undefined 未定义
var role = undefined;
// console.log(typeof role);
// console.log(null === undefined);
// 值相等,但类型不同,所以 === 返回false
// console.log(null == undefined);
// console.log(null === "null");
// console.log(null === 0);
// console.log(null + 100);
// NaN: Not a Number,非数值
// console.log(undefined + 100);
// console.log(undefined === NaN);
// console.log(isNaN(undefined));
// console.log(isNaN(100));
// console.log(NaN === NaN);
// 3. 对象: object, array, function
// 数组
var fruits = ["watermelon", "apple", "orange", "peach", "pear"];
// console.log(fruits);
// console.log(fruits[1]);
// console.log(fruits.length);
// typeof只能判断数组是不是对象类型,并不能确定它是一个数组
// console.log(typeof fruits);
// 判断数组的正确方式
// console.log(Array.isArray(fruits));
// 遍历数组
// for (var i = 0; i < fruits.length; i++) {
// console.log(fruits[i]);
// }
// forEach(function(item [, key, array]){...})
// fruits.forEach(function (item, key) {
// console.log("i: ", key, "item: ", item);
// });
// fruits.forEach((item, key) => console.log("i: ", key, "item: ", item));
// 获取数组部分元素
// console.log(fruits.slice(0, 3));
// console.log(fruits.slice(0));
// splice(): 实现对数组元素的新增,删除,替换
// 从第2个索引开始删除2个元素,并返回它们
// console.log(fruits.splice(1, 2));
// 新增数组元素
// console.log(fruits.splice(1, 0, "果汁", "黄瓜"));
// 更新操作
// console.log(fruits.splice(1, 2, "果汁", "黄瓜"));
// console.log(fruits);
// 对象: object
// js中的数组 ===> 类似 php 索引数组
// js中的对象 ===> 类似 php 关联数组
// 对象字面量
var student = {
id: 1,
name: "admin",
email: "admin@php.cn",
course: [34, 88, 93],
"my scroe": {
php: 90,
js: 60,
css: 70,
},
};
// console.log(student);
// console.table(student);
// 对象成员 的访问,使用点语法
// console.log(student.email);
// console.log(student.course[1]);
// console.log(student.course["2"]);
// console.log(student["my scroe"]);
// 遍历对象
// for ... in
// for (key in student) {
// console.log(student[key]);
// }
// Array.from(obj):将对象转为真正的数组
// console.log(Array.isArray(Array.from(student))); - 这块好像没有成功
// 获取对象所有属性组成的数组
// Object.keys(obj)返回对象所有属性组成的数组
var keys = Object.keys(student);
// console.log(keys);
// 根据键名遍历, item是键名/属性名
// keys.forEach(function (item) {
// console.log(this[item]);
// }, student);
// 命名函数
function f1(a, b) {
console.log(a + b);
}
f1(1, 2);
// 匿名函数
var f2 = function (a, b) {
console.log(a + b);
};
f2(100, 20);
// IIFE:立即调用函数
// 将函数的声明与调用合并
(function (a, b) {
console.log(a + b);
})(150, 40);
// (function (a, b) {
// console.log(a + b);
// }(158, 40));
// +function (a, b) {
// console.log(a + b);
// }(345, 60);
// !function (a, b) {
// console.log(a + b);
// }(345, 60);
// ~function (a, b) {
// console.log(a + b);
// }(345, 60);
// (function () {
// if (true) {
// var a = 10;
// }
// })();
console.log(a);
</script>
</body>
</html>
2. 流程控制:基本的if、switch、for、while
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>流程控制</title>
</head>
<body>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<script>
// 1. 分支
// 单分支
var age = 59;
age = 49;
// 如果代码块中只有一条语句,可以省略"{...}"
if (age >= 50) {
console.log("不想奋斗了,累了");
}
// 双分支
if (age >= 50) {
console.log("不想奋斗了,累了");
} else {
console.log("再努力一把");
}
// 多分支
age = 36;
if (age > 18 && age < 30) {
console.log("哥没车没房, 约不约?");
} else if (age >= 30 && age < 50) {
console.log("哥想有个家");
} else if (age >= 50) {
console.log("这是真爱");
}
// 默认分支 else
else {
console.log("姐才", age, ", 认你当二叔吧");
}
// switch,因为下面每个case是一个范围,因此switch中是true,
// 但如果是一个具体值的话,switch中可以写age
switch (true) {
case age > 18 && age < 30:
console.log("不想奋斗了,累了");
break;
case age >= 30 && age < 50:
console.log("哥想有个家");
break;
case age >= 50:
console.log("这是真爱");
break;
default:
console.log("姐才", age, ", 认你当二叔吧");
}
// 循环
var lis = document.querySelectorAll("ul:first-of-type li");
// for
for (var i = 0; i < lis.length; i++) {
lis[i].style.backgroundColor = "lightgreen";
}
// while
var lis = document.querySelectorAll("ul:last-of-type li");
var i = 0;
while (i < lis.length) {
lis[i].style.backgroundColor = "yellow";
i++;
}
</script>
</body>
</html>
3. js对象的序列化json格式的字符串
3-1. JSON 是什么
- JSON: JavaScript Object Notation(JS 对象表示法)
- JSON: 2006 年成为国际标准,并成为表示结构化数据的通用的格式
- JSON 借用了JS 对象字面量的语法规则,但并非 JS 对象,也并非只是 JS 才用 JSON
- JSON 独立于任何编程语言, 几乎所有编程语言都提供了访问 JSON 数据的 API 接口
- 尽管 JSON 与 JS 并无直接关系,但 JSON 在 JS 代码中应用最广泛
3-2. JSON 语法
JOSN 支持三种数据类型: 简单值, 对象, 数组
3-2.1 简单值
- 数值:
150
,3.24
- 字符串:
"Hello World!"
,必须使用双引号做为定界符 - 布尔值:
true
,false
- 空值:
null
注意: 不支持
undefined
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>js对象的序列化json格式的字符串</title>
</head>
<body>
<script>
var person = {
name: "Peter Zhu",
age: 29,
isMarried: true,
course: {
name: "JavaScript",
grade: 99,
},
getName: function () {
return this.name;
},
hobby: undefined,
toString: function () {
return "继承属性";
},
};
// 将js对象转为json格式的字符串
var jsonStr = JSON.stringify(person);
// 传入第二参数数组,对输出的结果进行限制
jsonStr = JSON.stringify(person, ["name", "age"]);
// 如果第二个参数是一个回调,可以进行动态过滤
jsonStr = JSON.stringify(person, function (key, value) {
switch (key) {
case "age":
return "年龄不能随便问的";
case "isMarried":
return undefined;
// 必须要有default, 才可以输出其它未处理的属性
default:
return value;
}
});
// json中没有方法, undefined也没有
console.log(jsonStr);
</script>
</body>
</html>
4. 作业与实战(全部操作了一遍,多数跟php差不多,但细节差异要注意,多练!)
0811-作业
将课堂上演示的常用类型,流程控制 ,json等知识全部上机操作一遍。
预习ajax, 事件, 等知识 , 明天会用到php, pdo,等知识 , 要预习的