博客列表 >front 17 js数据类型-流程控制-json(0811tue)

front 17 js数据类型-流程控制-json(0811tue)

老黑
老黑原创
2020年08月17日 22:04:26525浏览

主要内容:

  1. js数据类型,数组、对象、功能

    • 数组的slice和splice()-实现对数组元素的新增,删除,替换
    • 对象的for in遍历
    • 函数中的IIFE:立即调用函数
  2. 流程控制:基本的if、switch、for、while

  3. js对象的序列化json格式的字符串


1. 基本数据类型,数组、对象、功能

  • 数组的slice和splice()-实现对数组元素的新增,删除,替换
  • 对象的for in遍历
  • 函数中的IIFE:立即调用函数
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>数据类型与访问方式</title>
  7. </head>
  8. <body>
  9. <script>
  10. // 1. 原始类型
  11. // number 数值
  12. var grade = 88;
  13. // string 字符串
  14. var username = "peter";
  15. // bool: 布尔
  16. var flag = false;
  17. // 类型检查 typeof
  18. // console.log(typeof grade, typeof username, typeof flag);
  19. // 2. 特殊类型
  20. // null 空对象
  21. var title = null;
  22. // console.log(typeof title);
  23. // undefined 未定义
  24. var role = undefined;
  25. // console.log(typeof role);
  26. // console.log(null === undefined);
  27. // 值相等,但类型不同,所以 === 返回false
  28. // console.log(null == undefined);
  29. // console.log(null === "null");
  30. // console.log(null === 0);
  31. // console.log(null + 100);
  32. // NaN: Not a Number,非数值
  33. // console.log(undefined + 100);
  34. // console.log(undefined === NaN);
  35. // console.log(isNaN(undefined));
  36. // console.log(isNaN(100));
  37. // console.log(NaN === NaN);
  38. // 3. 对象: object, array, function
  39. // 数组
  40. var fruits = ["watermelon", "apple", "orange", "peach", "pear"];
  41. // console.log(fruits);
  42. // console.log(fruits[1]);
  43. // console.log(fruits.length);
  44. // typeof只能判断数组是不是对象类型,并不能确定它是一个数组
  45. // console.log(typeof fruits);
  46. // 判断数组的正确方式
  47. // console.log(Array.isArray(fruits));
  48. // 遍历数组
  49. // for (var i = 0; i < fruits.length; i++) {
  50. // console.log(fruits[i]);
  51. // }
  52. // forEach(function(item [, key, array]){...})
  53. // fruits.forEach(function (item, key) {
  54. // console.log("i: ", key, "item: ", item);
  55. // });
  56. // fruits.forEach((item, key) => console.log("i: ", key, "item: ", item));
  57. // 获取数组部分元素
  58. // console.log(fruits.slice(0, 3));
  59. // console.log(fruits.slice(0));
  60. // splice(): 实现对数组元素的新增,删除,替换
  61. // 从第2个索引开始删除2个元素,并返回它们
  62. // console.log(fruits.splice(1, 2));
  63. // 新增数组元素
  64. // console.log(fruits.splice(1, 0, "果汁", "黄瓜"));
  65. // 更新操作
  66. // console.log(fruits.splice(1, 2, "果汁", "黄瓜"));
  67. // console.log(fruits);
  68. // 对象: object
  69. // js中的数组 ===> 类似 php 索引数组
  70. // js中的对象 ===> 类似 php 关联数组
  71. // 对象字面量
  72. var student = {
  73. id: 1,
  74. name: "admin",
  75. email: "admin@php.cn",
  76. course: [34, 88, 93],
  77. "my scroe": {
  78. php: 90,
  79. js: 60,
  80. css: 70,
  81. },
  82. };
  83. // console.log(student);
  84. // console.table(student);
  85. // 对象成员 的访问,使用点语法
  86. // console.log(student.email);
  87. // console.log(student.course[1]);
  88. // console.log(student.course["2"]);
  89. // console.log(student["my scroe"]);
  90. // 遍历对象
  91. // for ... in
  92. // for (key in student) {
  93. // console.log(student[key]);
  94. // }
  95. // Array.from(obj):将对象转为真正的数组
  96. // console.log(Array.isArray(Array.from(student))); - 这块好像没有成功
  97. // 获取对象所有属性组成的数组
  98. // Object.keys(obj)返回对象所有属性组成的数组
  99. var keys = Object.keys(student);
  100. // console.log(keys);
  101. // 根据键名遍历, item是键名/属性名
  102. // keys.forEach(function (item) {
  103. // console.log(this[item]);
  104. // }, student);
  105. // 命名函数
  106. function f1(a, b) {
  107. console.log(a + b);
  108. }
  109. f1(1, 2);
  110. // 匿名函数
  111. var f2 = function (a, b) {
  112. console.log(a + b);
  113. };
  114. f2(100, 20);
  115. // IIFE:立即调用函数
  116. // 将函数的声明与调用合并
  117. (function (a, b) {
  118. console.log(a + b);
  119. })(150, 40);
  120. // (function (a, b) {
  121. // console.log(a + b);
  122. // }(158, 40));
  123. // +function (a, b) {
  124. // console.log(a + b);
  125. // }(345, 60);
  126. // !function (a, b) {
  127. // console.log(a + b);
  128. // }(345, 60);
  129. // ~function (a, b) {
  130. // console.log(a + b);
  131. // }(345, 60);
  132. // (function () {
  133. // if (true) {
  134. // var a = 10;
  135. // }
  136. // })();
  137. console.log(a);
  138. </script>
  139. </body>
  140. </html>

2. 流程控制:基本的if、switch、for、while

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>流程控制</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li>item1</li>
  11. <li>item2</li>
  12. <li>item3</li>
  13. </ul>
  14. <ul>
  15. <li>item1</li>
  16. <li>item2</li>
  17. <li>item3</li>
  18. </ul>
  19. <script>
  20. // 1. 分支
  21. // 单分支
  22. var age = 59;
  23. age = 49;
  24. // 如果代码块中只有一条语句,可以省略"{...}"
  25. if (age >= 50) {
  26. console.log("不想奋斗了,累了");
  27. }
  28. // 双分支
  29. if (age >= 50) {
  30. console.log("不想奋斗了,累了");
  31. } else {
  32. console.log("再努力一把");
  33. }
  34. // 多分支
  35. age = 36;
  36. if (age > 18 && age < 30) {
  37. console.log("哥没车没房, 约不约?");
  38. } else if (age >= 30 && age < 50) {
  39. console.log("哥想有个家");
  40. } else if (age >= 50) {
  41. console.log("这是真爱");
  42. }
  43. // 默认分支 else
  44. else {
  45. console.log("姐才", age, ", 认你当二叔吧");
  46. }
  47. // switch,因为下面每个case是一个范围,因此switch中是true,
  48. // 但如果是一个具体值的话,switch中可以写age
  49. switch (true) {
  50. case age > 18 && age < 30:
  51. console.log("不想奋斗了,累了");
  52. break;
  53. case age >= 30 && age < 50:
  54. console.log("哥想有个家");
  55. break;
  56. case age >= 50:
  57. console.log("这是真爱");
  58. break;
  59. default:
  60. console.log("姐才", age, ", 认你当二叔吧");
  61. }
  62. // 循环
  63. var lis = document.querySelectorAll("ul:first-of-type li");
  64. // for
  65. for (var i = 0; i < lis.length; i++) {
  66. lis[i].style.backgroundColor = "lightgreen";
  67. }
  68. // while
  69. var lis = document.querySelectorAll("ul:last-of-type li");
  70. var i = 0;
  71. while (i < lis.length) {
  72. lis[i].style.backgroundColor = "yellow";
  73. i++;
  74. }
  75. </script>
  76. </body>
  77. </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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>js对象的序列化json格式的字符串</title>
  7. </head>
  8. <body>
  9. <script>
  10. var person = {
  11. name: "Peter Zhu",
  12. age: 29,
  13. isMarried: true,
  14. course: {
  15. name: "JavaScript",
  16. grade: 99,
  17. },
  18. getName: function () {
  19. return this.name;
  20. },
  21. hobby: undefined,
  22. toString: function () {
  23. return "继承属性";
  24. },
  25. };
  26. // 将js对象转为json格式的字符串
  27. var jsonStr = JSON.stringify(person);
  28. // 传入第二参数数组,对输出的结果进行限制
  29. jsonStr = JSON.stringify(person, ["name", "age"]);
  30. // 如果第二个参数是一个回调,可以进行动态过滤
  31. jsonStr = JSON.stringify(person, function (key, value) {
  32. switch (key) {
  33. case "age":
  34. return "年龄不能随便问的";
  35. case "isMarried":
  36. return undefined;
  37. // 必须要有default, 才可以输出其它未处理的属性
  38. default:
  39. return value;
  40. }
  41. });
  42. // json中没有方法, undefined也没有
  43. console.log(jsonStr);
  44. </script>
  45. </body>
  46. </html>

4. 作业与实战(全部操作了一遍,多数跟php差不多,但细节差异要注意,多练!)

0811-作业
将课堂上演示的常用类型,流程控制 ,json等知识全部上机操作一遍。
预习ajax, 事件, 等知识 , 明天会用到php, pdo,等知识 , 要预习的

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议