js基础语法知识

常量与变量

  • ES6标准中引入了新的关键字const来定义常量,常量无法改变 使用const关键字创建常量,声明的同时必须赋值
  • let 关键字声明变量 变量如果只声明,未赋值,默认值为undefined 变量可以在程序任何地方修改
  • 为了区分变量与常量,一般变量名采用小写或驼峰标识,常量采用全大写的形式。
  1. // 声明一个变量
  2. let num = 5;
  3. console.log(num); //返回数值5
  4. num = 8;
  5. console.log(num); //返回数值8 ,说明变量随时可以改变的
  6. // 声明一个常量
  7. const USERNAME = "admin";
  8. console.log(USERNAME); //返回 admin
  9. // 说明变量声明用let,声明后随时可改变,常量声明时必须赋值,一旦声明无法改变

数据类型

  • 原始类型 number string boolean defined null
    三个最常用的 number string boolean
    这5种数据具有单值不可再分

  • 引用类型 array object funtion
    数组[]使用成员的索引来访问,默认从0开始 数组成员可以是任何类型
    对象{}和数组很像,索引是一个字符串或标识符,使用的是点语法
    当属性使用了非法字符串,必须转为字符串

  1. let data = "box";
  2. console.log(typeof data); //查看类型
  3. //数组
  4. const prices = [69, 86, 59, 23, 52];
  5. console.log(prices);
  6. console.log(prices[0], prices[1]);
  7. //对象
  8. const item1 = {
  9. //属性 变量
  10. name: "笔记本",
  11. num: 6,
  12. pirice: 699,
  13. };
  14. console.table(item1);
  15. console.log(item1.name, item1.num);
  16. const item2 = {
  17. "my name": "充电报",
  18. num: 9.9,
  19. };
  20. console.log(item2["my name"]);
  21. // 实际工作中 数组和对象结合
  22. const item3 = [
  23. { name: "笔记本", num: 6, pirice: 699 },
  24. { name: "笔记本", num: 6, pirice: 699 },
  25. ];
  26. console.table(item3);

函数的种类与参数类型

  • 函数种类: 普通函数 匿名函数 闭包函数

  • 参数类型:实际参数(调用参数)形式参数

  1. function sum1(num1, num2) {
  2. let total = 0;
  3. total = num1 + num2;
  4. console.log("total = ", total);
  5. }
  6. sum1(12, 34);
  7. // (num1, num2) 形式参数
  8. // (12, 34) 调用参数 实际参数
  9. console.log("--------");
  10. // 参数不足,设置默认参数
  11. function sum2(num1, num2 = 0) {
  12. let total = 0;
  13. total = num1 + num2;
  14. console.log("total =", total);
  15. }
  16. sum2(20);
  17. console.log("--------");
  18. //rest 归并参数
  19. function sum3(...args) {
  20. console.log(args);
  21. }
  22. sum3(256, 552, 25, 95, 85, 10);
  23. console.log("--------");
  24. function sum4(...args) {
  25. console.log(
  26. "total =",
  27. args.reduce((p, c) => p + c)
  28. );
  29. }
  30. sum4(256, 552, 25, 95, 85, 10);
  31. console.log("--------");
  32. const arr = [256, 552, 25, 95, 85, 10];
  33. sum4(...arr);
  34. //...用再形参中,归并操作 rest
  35. //...调用参数中,扩展操作 spread
  36. console.log("--------");
  37. //匿名函数 一次性的 立即执行函数
  38. // function(a,b){
  39. // console.log(a+b);
  40. // }(10,50);
  41. //如果匿名函数不是一次性的
  42. let add = function (a, b) {
  43. console.log(a + b);
  44. };
  45. add(40, 50);
  46. // 使用箭头函数来简化匿名函数表达式
  47. add = (a, b) => {
  48. return a + b;
  49. };
  50. console.log(add(10, 50));
  51. // 如果行数代码只有一行 省去{}
  52. // 参数只有一个,()可以去掉
  53. //没有参数 ()不能省去
  54. add = (a, b) => return a + b;
  55. console.log(add(70, 50));
  56. add = a => return a + 50;
  57. add = ( => return 10+5;

作用域与闭包

  • 全局作用域 函数作用域 块作用域
  1. //作用域分为全局作用域,函数作用域,块作用域
  2. {
  3. let a = 1;
  4. // 块作用域只能在块里面访问 if for while
  5. console.log(a);
  6. }
  7. //全局作用域
  8. //函数外 全局作用域\
  9. let name = "xiaoming";
  10. function demo() {
  11. //函数作用域
  12. let name = "xiaohong";
  13. console.log(name);
  14. //函数内部可以调用函数外作用域
  15. }
  16. demo();
  17. //name 先在函数内部查询,如果有直接访问,如果没有,向上一个作用域查询,直到全局
  18. //作用域链 查询变量 是单向的,由外向内传递 由内向外禁止
  • 闭包 两个条件 1、具有父子函数 2、自由变量
  1. //作用域分为全局作用域,函数作用域,块作用域
  2. {
  3. let a = 1;
  4. // 块作用域只能在块里面访问 if for while
  5. console.log(a);
  6. }
  7. //全局作用域
  8. //函数外 全局作用域\
  9. let name = "xiaoming";
  10. function demo() {
  11. //函数作用域
  12. let name = "xiaohong";
  13. console.log(name);
  14. //函数内部可以调用函数外作用域
  15. }
  16. demo();
  17. //name 先在函数内部查询,如果有直接访问,如果没有,向上一个作用域查询,直到全局
  18. //作用域链 查询变量 是单向的,由外向内传递 由内向外禁止
  19. //闭包 :两个条件 1、具有父子函数 2、自由变量
  20. function parent(a) {
  21. //a 是子函数f的自由变量
  22. function f(b) {
  23. // b 外围参数
  24. let c = 6; //c私有变量 bc都是当前函数自有的
  25. return a + b + c;
  26. }
  27. return f;
  28. }
  29. //调用parent 返回一个函数
  30. console.log(parent(8));
  31. let f1 = parent(8);
  32. console.log(f1(9));
  33. console.log("---------");
  34. //parent 调用结束 应该释放掉 ,但是a被子函数f引用,所以父函数不能销毁
  35. //就产生了闭包,代码中闭包太多消耗内存
  36. //经典应用 点赞 通常与iife 立即执行函数配合
  37. let counter = (function (n) {
  38. //n 是自由变量 不属于子函数
  39. return function () {
  40. // 外部参数和自己声明的变量
  41. return n++;
  42. };
  43. })(56);
  44. console.log(counter());
  45. console.log(counter());
  46. console.log(counter());

对象字面量简化

  1. let name = "xiaoming";
  2. let user = {
  3. //name:"xiaoming",
  4. //name:name,
  5. name,
  6. };
  7. console.log(user.name);
  8. // 两个条件:1/对象属性和变量处于同一个作用域
  9. // 2 对象属性和变量同名
  10. //方法的简化
  11. user = {
  12. name,
  13. getInfo() {
  14. // 将: function 去掉
  15. //尽量不要用箭头函数简化,除非不要碰到this
  16. return "我是 " + user.name;
  17. },
  18. };
  19. console.log(user.getInfo());
  20. // this
  21. let mobile = {
  22. name: "iPhone 13",
  23. getInfo() {
  24. // 将: function 去掉
  25. //尽量不要用箭头函数简化,除非不要碰到this
  26. return mobile.name;
  27. },
  28. };
  29. let mobile2 = {
  30. name: "iPhone 13",
  31. getInfo() {
  32. // this 是mobile2的引用
  33. // this=mobile2; 是假想代码
  34. return this.name;
  35. },
  36. };

模板字符串与标签函数

  1. console.log("0001");
  2. let a = 10,
  3. b = 20;
  4. //${}插值占位符,可以将变量表达式嵌入到字符中
  5. let res = `${a}+${b}=${a + b}`;
  6. console.log(res);
  7. //
  8. let long = `
  9. css
  10. html
  11. js`;
  12. console.log(long);
  13. //标签函数 使用模板字符串为参数的函数
  14. // alert`hello ${10} ${20}`;
  15. //console.log`hello ${10} ${20} ${30} world`;
  16. // 标签函数 第一个参数是数组,第二个是插值表达式
  17. //
  18. function total(num, price) {
  19. console.log(num * price);
  20. }
  21. total(10, 20);
  22. function total2(string, num, price) {
  23. //console.log(num * price);
  24. let res = `${string[0]}${10}${string[1]}${90},总金额 ${num * price} 元`;
  25. console.log(res);
  26. }
  27. total2`数量:${10} 单价:${90}`;
  28. // 模板字符串中的参数占位符很多,可以哦那个rest进行归并
  29. sum`计算多个数之和:${5}${6}${6}${8}${9}${7}`;
  30. function sum(strings, ...args) {
  31. console.log(`${args.join()}之和是 ${args.reduce((p, c) => p + c)}`);
  32. }
  33. //标签字符串就是在模板字符串前加了标签

更多相关文章

  1. JavaScript 基本了解
  2. JavaScript快速入门
  3. box-sizing的作用+伪类选择器的参数 an+b 的应用+媒体查询:@media
  4. 什么是HTML版本网站地图?网站地图有什么作用?
  5. 网站如何寻找友情链接,网站友情链接的作用有哪些?
  6. --save 和 --save-dev 的作用和区别简单描述
  7. php常用字符串函数
  8. 你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?
  9. 补0817:域名空间内类实现自动加载,use的作用 及 mysql数据库DDL,D

随机推荐

  1. android studio 打包 so 库
  2. Android SDK和最新ADT下载地址 + 环境搭
  3. Mono for Android—初体验之“电话拨号器
  4. 关于Android(安卓)Pie(Android(安卓)9.0),你
  5. 全屏、小屏、横屏、竖屏的切换
  6. android listview的divider分割线的宽度
  7. Android Drawable缓存
  8. android之实现ProgressBar进度条组件
  9. Android 隐藏ActionBar
  10. Android 使用WebView控件展示SVG图