博客列表 >JS - 数据类型/流程控制及JSON基础

JS - 数据类型/流程控制及JSON基础

晴天
晴天原创
2020年05月21日 19:20:42776浏览

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'] 值 该如何操作呢?

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