Blogger Information
Blog 60
fans 5
comment 3
visits 65263
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JS基础知识
longlong
Original
620 people have browsed it

1.数据类型及其访问方式

数据类型分为基本类型和引用数据类型

1.1 基本类型访问及其判断

  1. <script>
  2. // 1. 值类型(基本类型)
  3. // 1.1 数字类型 Number
  4. let num = 10;
  5. // 1.2 字符串类型 String
  6. let str = 'hello';
  7. // 1.3 布尔类型 Boolean
  8. let doIt = true;
  9. // 1.4 对空类型 Null
  10. let name = null;
  11. // 1.5 未定义 undefined
  12. let age = undefined;
  13. // 访问
  14. console.log(num);
  15. console.log(str);
  16. console.log(doIt);
  17. console.log(name);
  18. console.log(age);
  19. // 类型判断 typeof
  20. console.log(typeof num,str,doIt,name,age);
  21. </script>

1.2 引用数据类型及其判断

引用数据类型分为:数组、对象、函数

  • 数组
  1. // 2. 引用数据类型(在JS中它们也都属于对象)
  2. // 2.1 数组
  3. let arr = ['老大','老二','老三','老四','老五'];
  4. // 2.1.1 访问数组
  5. console.log(arr);
  6. // 2.1.2 访问数组中的元素
  7. console.log(arr[2]);
  8. // 2.1.3 查看数组的长度
  9. console.log(arr.length);
  10. // 2.1.4 判断类型 (typeof 不能判断引用数据类型的具体类型,它判断出的都是object对象)
  11. console.log(typeof arr);
  12. // 2.1.5 判断数组类型时使用 Array.isArray()
  13. console.log(Array.isArray(arr));
  14. // 2.1.6 遍历数组
  15. // 方式一:for()
  16. for (let i=0;i<arr.length;i++) { console.log(arr[i]); }
  17. // 方式二:forEach()
  18. arr.forEach (function (item,index) { console.log('index: ',index,'item: ',item); });
  19. // 使用箭头函数
  20. arr.forEach((item,index) => console.log( 'index: ',index,'item: ',item ));
  21. // 方式三:for...of...
  22. for (let item of arr) { console.log(item); }
  23. // 2.1.7 获取数组部分元素
  24. console.log(arr.slice(1,3));
  25. // 2.1.8 splice():实现对数组的新增,删除,替换
  26. // 删除(从第一个元素开始删除,删除3个,最终数组只剩2个元素了)
  27. arr.splice(1,3);
  28. console.log(arr);
  29. // 新增(从第二个元素开始,删除0个,新增2个)
  30. arr.splice(2,0,'老六','老七');
  31. console.log(arr);
  32. // 替换(从第二个元素开始删除2个,再新增2个将删除的元素替换掉,相当于更新了数组元素)
  33. arr.splice(2,2,'老八','老九');
  34. console.log(arr);

  • 对象
  1. // 2.2 对象
  2. let obj = {
  3. name : 'Alice',
  4. age : 20,
  5. email : 'alice@php.cn',
  6. isMarried : false,
  7. hobby : ['fish','book','film'],
  8. // 不规则的命名必须加上引号
  9. 'her time' : {
  10. morning : 'sport',
  11. afternoon : 'eating',
  12. evening : 'study',
  13. },
  14. };
  15. // 访问对象
  16. console.log(obj);
  17. // 访问对象,以表格的形式控制台输出
  18. console.table(obj);
  19. // 访问对象中的元素,以对象的方式访问,加上.号连接
  20. console.log(obj.email);
  21. // 访问对象中的元素,以数组的方式访问
  22. console.log(obj["isMarried"]);
  23. // 访问对象中的数组元素
  24. console.log(obj.hobby[1]);
  25. console.log(obj["hobby"][1]);
  26. // 访问对象中的对象元素
  27. console.log(obj["her time"].evening);
  28. console.log(obj["her time"]["evening"]);
  29. // 遍历对象,方式一:for...in...
  30. for ( let key in obj) {
  31. console.log('索引:',key,'--->',obj[key]);
  32. }
  33. // 遍历对象,方式二:先取到对象中的属性名组成数组,再用forEach遍历属性,传入第二参数即对象
  34. let keys = Object.keys(obj);
  35. console.log(keys);
  36. keys.forEach(function (item) {
  37. // 访问对象中的属性时以数组的方式,因为有的属性命名可能不规则
  38. console.log(item,'--->',this[item]);
  39. },obj)

  • 对象转为数组
  1. // 2.3 对象转换为数组
  2. let obj2 = {
  3. 0 : 'name',
  4. 1: 'age',
  5. 2 : 'email',
  6. "3" : 'tel',
  7. 4.1 : 'haha',
  8. "-5" : 'xixi',
  9. hello : 'world',
  10. length : 7,
  11. };
  12. // 将对象转换为数组Array.from()
  13. // 使用此函数,想成功转为真正的数组,对象需要满足两个条件:
  14. // 1. 对象中的属性名必须是正整数数字类型或字符串型的正整数数字
  15. // 2. 对象中必须有length属性,指定转换后的数组长度
  16. let arr1= Array.from(obj2);
  17. console.log(arr1);
  18. // 属性名不符合规则的,在转换为数组后,都是undefined

  • 函数
  1. // 2.4 函数
  2. // 2.4.1 命名函数
  3. function test1 (x,y) {
  4. console.log(x+y);
  5. }
  6. test1(10,10);
  7. // 2.4.2 匿名函数
  8. let test2 = function (x,y) {
  9. console.log(x*y);
  10. }
  11. test2(5,5);
  12. // 2.4.3 立即调用函数 IIFE :将函数的声明与调用合二为一了
  13. // 写法一:
  14. (function (x,y) {
  15. console.log('写法一:',x+y);
  16. })(20,20);
  17. // 写法二:
  18. (function (x,y) {
  19. console.log('写法二:',x+y);
  20. }(30,30));
  21. // 写法三:在函数前面加上合法运算符
  22. +function (x,y) {
  23. console.log('写法三:',x+y);
  24. }(40,40);
  25. ~function (x,y) {
  26. console.log('写法三:',x+y);
  27. }(40,40);
  28. // 用立即调用函数的好处是:不会污染全局对象

2. 流程控制

  1. <script>
  2. // 流程控制
  3. // 1. 单分支
  4. let score = 65;
  5. if (score>=60) {
  6. console.log('恭喜你,及格了!');
  7. }
  8. // 2. 双分支
  9. score = 50;
  10. if (score>=60){
  11. console.log('恭喜你,及格了!');
  12. }else {
  13. console.log('准备回去复读把!');
  14. }
  15. // 3. 多分支
  16. score = 88;
  17. if (score>=90){
  18. console.log('成绩非常优秀!');
  19. }else if (score<90 && score>=80){
  20. console.log('成绩良好!');
  21. }else if (score<80 && score>=70){
  22. console.log('成绩中等!');
  23. }else if (score<70 && score>=60){
  24. console.log('刚好及格!');
  25. }else {
  26. console.log('准备复读把!');
  27. }
  28. // 4. 用switch简化多分支
  29. score = 77;
  30. // 当 case 判断的不是单值类型,而是范围的时候,switch 中最好传true
  31. switch (true) {
  32. case score>=90 : console.log('成绩非常优秀!');
  33. break;
  34. case score<90 && score>=80 : console.log('成绩良好!');
  35. break;
  36. case score<80 && score>=70 : console.log('成绩中等!');
  37. break;
  38. case score<70 && score>=60 : console.log('刚好及格!');
  39. break;
  40. default : console.log('准备复读把!');
  41. }
  42. </script>

3. 循环

  1. <body>
  2. <table border="1" width="500" height="100">
  3. <tr>
  4. <td>1</td>
  5. <td>2</td>
  6. <td>3</td>
  7. <td>4</td>
  8. </tr>
  9. <tr>
  10. <td>1</td>
  11. <td>2</td>
  12. <td>3</td>
  13. <td>4</td>
  14. </tr>
  15. <tr>
  16. <td>1</td>
  17. <td>2</td>
  18. <td>3</td>
  19. <td>4</td>
  20. </tr>
  21. </table>
  22. <script>
  23. let tds = document.querySelectorAll('table tr td:nth-of-type(2)');
  24. for (let td of tds) {
  25. td.style.backgroundColor = 'yellow';
  26. }
  27. // 1. for 循环
  28. let tds1 = document.querySelectorAll('table tr td:nth-of-type(3)');
  29. for (let i=0;i<tds1.length;i++){
  30. tds1[i].style.backgroundColor = 'green';
  31. }
  32. // 2. while 循环
  33. let tds2 = document.querySelectorAll('table tr td:first-of-type');
  34. let i=0;
  35. while (i<tds2.length){
  36. tds2[i].style.backgroundColor = 'red';
  37. i++;
  38. }
  39. // 3. do...while 循环
  40. let tds3 = document.querySelectorAll('table tr td:last-of-type');
  41. let j=0;
  42. do{
  43. tds3[j].style.backgroundColor = 'blue';
  44. j++
  45. } while(j<tds3.length);
  46. </script>
  47. </body>

4. JS对象序列化为JSON格式字符串

  1. <script>
  2. /*
  3. JSON 重要知识点:
  4. 1. JSON中中能有三种数据类型:简单值类型,对象,数组
  5. 1.1 简单值类型:
  6. 数值:15,99
  7. 字符串:aaa,bbb,name,age
  8. 布尔:true,false
  9. 空值:null
  10. 注意:未定义undefined不支持
  11. 2. JSON 只是长的像JS对象,借用了JS对象字面量的语法规则,但和JS没有关系,它就是字符串,只是样式那样而已
  12. 3. JSON 中不存在方法(函数)
  13. 4. 几乎所有编程语言都提供了访问 JSON 数据的 API 接口
  14. */
  15. let obj = {
  16. name : 'Mike',
  17. age : 20,
  18. study : {
  19. "php" : 90,
  20. "css" : 88,
  21. "js" : 92,
  22. },
  23. hobby : ['basketball','football','smoke'],
  24. girl : null,
  25. isMale : true,
  26. show : function () {
  27. return '个人信息';
  28. },
  29. isHandsome : undefined,
  30. };
  31. let json = JSON.stringify(obj);
  32. console.log(json);
  33. // 第二个参数传入数组,对输出的结果进行限制
  34. json = JSON.stringify(obj,["name","study","hobby"],'\t');
  35. console.log(json);
  36. // 第二个参数传入回调函数,可进行动态过滤
  37. json = JSON.stringify(obj,function (key,value) {
  38. switch (key) {
  39. case 'study' : return '你无权限访问学生成绩';
  40. case 'girl' : return '关你什么事';
  41. // 这里必须加default才能输出其他未处理的属性
  42. default : return value;
  43. }
  44. },'\t');
  45. console.log(json);
  46. // JSON.stringify(value, replacer , space)语法
  47. // 第三个参数可传入 \t ,可以将输出结果以制表符形式输出
  48. </script>

这里发现一个问题,当第二个参数是传的数组的时候,原JS对象中的study对象没有输出,但是不传第二个参数或第二个参数是回调时能正常输出:

经过一些资料查看了解到,当第二个参数是数组时,它仅处理具有键值的属性,所以不能处理对象,JSON.stringify()这个函数中三个参数的具体意义如下:

JSON.stringify(value, replacer , space)语法 :

  • value:必需,要转换的JS对象或数组

  • replacer:可选,若为数组,仅转换该数组中具有键值的成员,如果这个成员在原对象中本身也是一个对象,那么将不能被转换;若为函数,将会传入此JS对象或数组的键和值,然后根据函数的自定义规则进行返回

  • space:可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:学过其它语言, 这些东西非常的简单
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