js 数据类型的访问方式、流程控制、js 对象序列化 json 字符串
1.js 数据类型的访问方式
案例实践代码整理:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>数据类型与访问方式</title>
</head>
<body>
<script type="text/javascript">
// 1. 原始类型
// number 数值
var grade = 88;
// console.log(grade);
// string 字符串
var username = "peter";
// console.log(username);
// bool: 布尔
var flag = false;
// console.log(flag);
// 类型检查 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
//1.数组
var fruits = ["watermelon", "apple", "orange", "peach", "pear"];
// console.log(fruits);
// console.log(fruits[0]);
// console.log(fruits.length);
//typeof只能判断数组是不是对象类型,并不能确定它是一个数组
// console.log(typeof fruits);
//判断数组的正确方式
// console.log(Array.isArray(fruits));
//遍历数组方式1
// console.log("for遍历数组:");
// for(var i = 0;i < fruits.length;i++)
// {
// console.log(fruits[i]);
// }
//遍历数组方式2
// forEach(function(item [, key, array]){...})
// console.log("forEach遍历数组:");
// 遍历值
// console.log("forEach遍历值:");
// fruits.forEach(function(item){
// console.log(item);
// });
// 遍历键和值
// console.log("forEach键和值:");
// fruits.forEach(function(item,key){
// console.log("i:",key,"item:",item);
// });
// 遍历键/值/数组
// console.log("forEach遍历键/值/数组:");
// fruits.forEach(function(item,key,array){
// console.log("i:",key,"item:",item,"array:",array);
// });
//ES6更加简化遍历方式3
// 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);
// 新增数组元素
// console.log(fruits.splice(1, 0, "果汁", "黄瓜"));
// console.log(fruits);
// 更新操作
// console.log(fruits.splice(1, 2, "苹果", "橘子"));
// console.log(fruits);
// 2.对象: 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);
//3.函数
// 3.1命名函数
function f1(a, b) {
console.log(a + b);
}
f1(2, 3);
// 3.2匿名函数
var f2 = function (a, b) {
console.log(a + b);
};
f2(100, 200);
//3.3 IIFE:立即调用函数
// 将函数的声明与调用合并
//方式1:
// (function (a, b) {
// console.log(a + b);
// })(150, 40);
//方式2:
// (function (a, b) {
// console.log(a + b);
// })(152, 30);
//方式3:
// +(function (a, b) {
// console.log(a + b);
// })(112, 38);
//方式4:
// !(function (a, b) {
// console.log(a + b);
// })(1, 38);
//方式5:
// ~(function (a, b) {
// console.log(a + b);
// })(1, 32);
// (function () {
// if (true) {
// var a = 10;
// }
// })();
// console.log(a);
</script>
</body>
</html>
运行效果图:
2.js 流程控制
实践案例代码:
<!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>
<li>item4</li>
</ul>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
<li>item4</li>
</ul>
<script>
// 1.分支
//单分支
var age = 59;
age = 50;
// 如果代码块中只有一条语句,可以省略"{...}"
if (age >= 50) {
console.log("不想奋斗,累了");
}
// 双分支
age = 49;
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 {
console.log("姐才", age, ",认你当二叔吧");
}
// switch
age = 16;
switch (
true //age
) {
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.color = "red";
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 格式的字符串
实践案例代码:
<!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>
// ## 1. JSON 是什么
// - JSON: JavaScript Object Notation(JS 对象表示法)
// - JSON: 2006 年成为国际标准,并成为表示结构化数据的通用的格式
// - JSON 借用了**JS 对象字面量**的语法规则,但并非 JS 对象,也并非只是 JS 才用 JSON
// - JSON 独立于任何编程语言, 几乎所有编程语言都提供了访问 JSON 数据的 API 接口
// - 尽管 JSON 与 JS 并无直接关系,但 JSON 在 JS 代码中应用最广泛
// ## 2. JSON 语法
// JOSN 支持三种数据类型: 简单值, 对象, 数组
// ### 2.1 简单值
// - 数值: `150`, `3.24`
// - 字符串: `"Hello World!"`,必须使用**双引号**做为定界符
// - 布尔值: `true`, `false`
// - 空值: `null`
// > 注意: 不支持`undefined`
var person = {
name: "Peter Zhu",
age: 30,
isMarried: true,
course: {
name: "JavaScript",
grade: 99,
},
getName: function () {
return this.name;
},
hobby: undefined,
toString: function () {
return "继承属性";
},
};
// 将js对象转为json格式的字符串
var jsonStr = JSON.stringify(person);
console.log(jsonStr);
// 传入第二参数数组,对输出的结果进行限制
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.总结
1.数据类型
//(1). 原始类型: number 数值、bool: 布尔、类型检查 typeof
//(2).特殊类型:null 空对象、undefined 未定义、
//(3). 对象:object,array,function
2.流程控制
(1) 分支:单分支(if)、双分支(if else)、多分支(if else if...else if...else)
(2)多分支:switch case default
(3) 循环:for循环/while 循环
3.json格式的字符串
(1)字符串: `"Hello World!"`,必须使用**双引号**做为定界符
(2)JOSN 支持三种数据类型: 简单值, 对象, 数组
(3)注意: 不支持`undefined`