Blogger Information
Blog 47
fans 1
comment 0
visits 53058
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS - 数据类型/流程控制及JSON基础
晴天
Original
777 people have browsed it

JS 中 数据类型,流程控制与 json

1.数据类型

1.1 原始类型

类型名 描述
number 数值
string 字符串
boolean 布尔型
  1. var age = 25;
  2. var username = "admin";
  3. var ismarry = false;
  4. // 检测变量类型使用关键字 typeof
  5. console.log(typeof age, typeof username, typeof ismarry);
  6. //输出 number string boolean

1.2 特殊类型

类型名 描述
undefined 专用于表示非对象类型变量的空/无
null 表示空对象

undefinednull 都有空/无的意义

  1. // 比较
  2. console.log(undefined == null); //输出 true
  3. // 但是 检查类型会不一样
  4. console.log(typeof undefined); //输出 undefined
  5. console.log(typeof null); // 输出 object
  6. // 测试与数值相加
  7. console.log(undefined + 100); //输出 NaN(Not a Number) 不是一个数值
  8. console.log(null + 100); // 输出 100

1.3 对象类型

类型 描述
array 数组
object 对象
function 函数

1.3.1 数组

  • js 数组与 php 索引数组类似
  1. // 声明一个数组
  2. var arr = ["apple", "orange", "banana", "peach", "pear"];
  3. // 获取数组属性个数
  4. console.log(arr.length); //输出 5
  5. // 获取数组中的第一个值
  6. console.log(arr[0]); // 输出 apple
  7. // 查看数组是不是array
  8. console.log(typeof arr); //输出 object
  9. // 错! 正确方式 判断是不是的数组
  10. console.log(Array.isArray(arr)); //输出 true
  11. // 遍历这个数组 for循环
  12. for (var i = 0; i < arr.length; i++) {
  13. console.log(arr[i]);
  14. }
  15. //输出 apple
  16. // orange
  17. // banana
  18. // peach
  19. // pear
  20. // 使用 foreach 遍历 js中foreach是数组对象上的方法
  21. arr.forEach(function (item) {
  22. console.log(item);
  23. });
  24. //输出 apple
  25. // orange
  26. // banana
  27. // peach
  28. // pear
  29. console.log("---------------");
  30. // 获取数组中的部分元素
  31. // .slice(起始位置, 结束位置)
  32. console.log(arr.slice(3, 5));
  33. // 输出 0: "peach"
  34. // 1: "pear"
  35. // 插入 替换与删除 .splice(插入位置 , 删除个数 , 将要要替换的元素)
  36. // 实现插入
  37. arr.splice(3, 0, "桃子", "梨子");
  38. console.log(arr);
  39. // 输出 ["apple", "orange", "banana", "桃子", "梨子", "peach", "pear"]
  40. // 实现删除 有返回值返回被删除的元素
  41. var sarr = arr.splice(3, 2);
  42. console.log(sarr); //输出 ["桃子", "梨子"]
  43. console.log(arr); //输出 ["apple", "orange", "banana", "peach", "pear"]
  44. // 实现替换
  45. arr.splice(3, 2, "桃子", "梨子");
  46. console.log(arr);
  47. //输出 ["apple", "orange", "banana", "桃子", "梨子"]

1.3.2 对象

  • js 对象类似于 php 的关联数组
  1. // 声明一个对象
  2. var obj = {
  3. id: 1,
  4. name: "peter",
  5. email: "123@php.cn",
  6. "test scroe": {
  7. php: 80,
  8. js: 65,
  9. css: 70,
  10. },
  11. };
  12. // 输出
  13. console.log(obj);
  14. // 以表格形式输出
  15. console.table(obj);

  1. // 访问对象成员使用 '.' 操作符 php使用 '->'
  2. console.log(obj.email); //输出123@php.cn
  3. // 当然也可以,以数组形式访问
  4. console.log(obj["email"]); //输出 123@php.cn
  5. console.log("-------------");
  6. // 循环输出 for(对象键名 in 对象){ 对象[键名]}
  7. for (key in obj) {
  8. console.log(obj[key]);
  9. }

  1. // 借助foreach进行遍历
  2. // 获取键名数组
  3. var keys = Object.keys(obj);
  4. console.log(keys); //输出 ["id", "name", "email", "test scroe"]
  5. // 遍历
  6. keys.forEach(function (item) {
  7. console.log(this[item]);
  8. }, obj);

1.3.3 函数

  • 与 php 相同 使用 function
  1. // 声明一个函数
  2. function f1(a, b) {
  3. console.log(a + "+" + b + "=" + (a + b));
  4. }
  5. // 调用
  6. f1(19, 46); //输出 19+46=65
  7. // 匿名函数 函数表达式
  8. var f2 = function (a, b) {
  9. console.log(a + "+" + b + "=" + (a + b));
  10. };
  11. // 调用
  12. f2(10, 56); //输出 10+56=66
  13. // 立即调用函数
  14. (function (a, b) {
  15. console.log(a + "+" + b + "=" + (a + b));
  16. })(15, 23); // 输出 15+23=38

2. 流程控制

2.1 if 语句

  1. // 声明一个变量
  2. var girlAge = 30;
  3. // 单分支
  4. if (girlAge > 20 && girlAge <= 30) {
  5. console.log("咱们结婚吧");
  6. }
  7. // 输出 咱们结婚吧
  8. // 双分支
  9. if (girlAge < 20) {
  10. console.log("你还小");
  11. } else {
  12. console.log("我可以追你吗");
  13. }
  14. // 输出 我可以追你吗
  15. // 多分支
  16. if (girlAge < 18) {
  17. console.log("做我干女儿吧");
  18. } else if (girlAge < 25) {
  19. console.log("我可以追你吗");
  20. } else {
  21. console.log("我还小 ");
  22. }
  23. // 输出 我还小

2.2 swich 语句

  1. // 声明一个变量
  2. var girlAge = 30;
  3. switch (true) {
  4. case girlAge > 18 && girlAge < 30:
  5. console.log("哥没车没房,愿意不?");
  6. break;
  7. case girlAge >= 30 && girlAge < 50:
  8. console.log("我想有个家");
  9. break;
  10. default:
  11. console.log("姐才" + girlAge + "岁, 认你当干爹吧");
  12. break;
  13. }
  14. //输出 我想有个家

2.3 for 循环 与 while 循环

  1. <ul>
  2. <li>1</li>
  3. <li>2</li>
  4. <li>3</li>
  5. </ul>
  6. <ul>
  7. <li>1</li>
  8. <li>2</li>
  9. <li>3</li>
  10. </ul>
  11. <script>
  12. // for 循环
  13. var items = document.querySelectorAll("ul:first-of-type");
  14. for (var i = 0; i < items.length; i++) {
  15. items[i].style.color = "red";
  16. }
  17. // while
  18. var items = document.querySelectorAll("ul:last-of-type");
  19. var i = 0;
  20. while (i < items.length) {
  21. items[i].style.color = "blue";
  22. i++;
  23. }
  24. </script>

3. 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 语法

JSON 支持三种数据类型:简单值,对象,数组

3.2.1 简单值

  • 数字 100,3.14
  • 字符串: "hello word" , 必须使用双引号作为定界符
  • 布尔值:true , false
  • 空值 : null

注意 不支持 undefined

3.2.2 对象

  • 原生 JS 对象字面量
  1. // 原生JS对象字面量
  2. var username = {
  3. name:'peter',
  4. age:30
  5. };
  6. // 等价语法
  7. var username = {
  8. "name":'peter',
  9. "age":30
  10. };
  11. // JSON对象与他相比有二处不同
  12. // 1.没有变量声明:JSON 没有变量概念
  13. // 2.没有分号:JSON不是JS语句
  14. // 3.属性名:任何时候都必须添加双引号,且必须是双引号
  15. // 以上内容用JSON对象表示
  16. {
  17. "name":'peter',
  18. "age":30
  19. }
  20. // JSON属性值也支持复杂类型,如对象
  21. {
  22. "name":"peter",
  23. "age":29,
  24. "course":{
  25. "name":"michael"
  26. "age":80
  27. }
  28. }

3.2.3 数组

  • JSON 数组采用了原生 JS 中数组字面量语法
  1. // 原生JS数组
  2. var arr = [101, "电脑", 9800];
  3. // JSON 表示 无变量和分号
  4. [101, "电脑", 9800];
  5. // 常见场景时将数组与对象组合表示更加复杂的数据类型;
  6. [
  7. ({
  8. id: 101,
  9. name: "电脑",
  10. price: 9800,
  11. },
  12. {
  13. id: 102,
  14. name: "手机",
  15. price: 4500,
  16. },
  17. {
  18. id: 103,
  19. name: "相机",
  20. price: 16800,
  21. }),
  22. ];
  23. // 许多软件的配置文件都是采用这种数据格式,如VSCODE

3.3 JSON 解析与序列化

3.3.1 JSON 对象

  • ES5 t 提供了内置全局对象JSON,对 JSON 数据提供了全面支持
  • JSON.stringify():将原生 JS 对象,序列化为 JSON 字符串,用于存储和传输
  • JSON.parse():将 JSON 字符串 解析为原生 JS 对象
3.3.1.1 对象序列化为 JSON
  • JSON.stringify(js对象,允许序列化的属性,缩进字符数量)
  1. // 创建一个准备JSON序列化的对象
  2. var person = {
  3. name: "Peter Zhu",
  4. age: 29,
  5. isMarried: true,
  6. course: {
  7. name: "JavaScript",
  8. grade: 99,
  9. },
  10. getName: function () {
  11. return this.name;
  12. },
  13. hobby: undefined,
  14. toString: function () {
  15. return "继承属性";
  16. },
  17. };
  18. // 进行JSON序列化并保存到一个变量中
  19. var jsonstr = JSON.stringify(person);
  20. console.log(jsonstr);
  21. // 输出{"name":"Peter Zhu","age":29,"isMarried":true,"course":{"name":"JavaScript","grade":99}}
  22. // undefined 的变量 和 函数 将不会被JSON 序列化
  23. // 第二参数 传值数组 将限制允许序列化的属性,也就是只会将数组中的值被JSON序列化
  24. var jsonstr = JSON.stringify(person, ["name", "age"]);
  25. console.log(jsonstr);
  26. // 输出 {"name":"Peter Zhu","age":29}
  27. // 第二参数 传值函数 可以改变原对象中的值再进行JSON序列化
  28. var jsonstr = JSON.stringify(person, function (key, value) {
  29. // 条件执行判断
  30. switch (key) {
  31. case "age":
  32. return "年龄是秘密";
  33. case "grade":
  34. return 85;
  35. case "isMarried":
  36. return undefined; // 也就是不输出
  37. default:
  38. return value;
  39. }
  40. });
  41. console.log(jsonstr);
  42. //输出 {"name":"Peter Zhu","age":"年龄是秘密","course":{"name":"JavaScript","grade":85}}

4. 总结

PHP 中使用 json_encode() json_decode() 进行编码解码,JS 中使用JSON.stringify() JSON.parse() 进行编码解码, 有一处不完美 如果只想改变 person.name 的值 不改变 parson.course['name'] 值 该如何操作呢?

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:person.name , parson.course['name'] , 本身就不同, 更新互不影响
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post