JavaScript 基础篇一

JavaScript

历史

  • 布兰登。艾奇(1961~)
  • 1995年,十天完成设计
  • 网景公司最初为LiveScript ,后来与Sun合作,将其改名为Javascript

javascript是什么?

  • 运行在客户端的脚本语言。
  • 脚本语言:不需要编译器,运行过程中由js解释器,逐行执行。
  • 可以基于node.js平台,进行服务器端编程。

祂能做什么?

  • 最早作为表单验证,减少服务器压力。
  • 网页特效
  • 服务端开发 Node.js
  • 桌面程序 Electron
  • App Cordova
  • 控制硬件-物联网 Ruff
  • 游戏开发 cocos2d-js

解释性语言与编译型语言

  • 概述:计算机不能直接理解任何除了机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言才能执行程序,程序语言翻译成机器语言的工具,被称为翻译器。
  • js ===> 翻译器 ===> 机器语言
  • 翻译器翻译方式有两种,一个是编译,另外一个是解释。区别是翻译的时间点不同。
  • 解释:翻译一行执行一行。类似吃火锅。
  • 编译:翻译完全部再执行。类似吃餐馆。

标识符,关键字,保留字

  • 标识符:就是开放人员为变量,属性,函数,参数取得名字。不能为关键字与保留字。
  • 关键字:指的是Js本身就已经使用了的名字,不能再用它们充当变量名,方法名。不用去记。
  • 保留字:被预留的名字。

浏览器执行js

  • 浏览器两个部分:
    • 1.渲染引擎 blink 老版本webkit
    • 2.js引擎 v8
  • 浏览器本身不会执行js代码,而是内置的js引擎(v8解释器)来执行js代码,引擎执行代码时,是逐行解释每一句源码,然后转换为机器语言,再由计算机去执行,所以js语言归为脚本语言,会逐行解释执行。

js组成

  • 1.Ecmascript 语法
  • 2.Dom 页面文档对象
  • 3.Bom 浏览器对象

js代码写法

  • 1.行内方式
  • 2.内嵌方式
  • 3.外部引用方式

js注释

  • 单行注释 ctrl + /
  • 多行注释 ctrl + shift + / (需要修改vscode默认 shift + alt + a)

js常用输出语句

  • alert() 浏览器弹框
  • console.log() 浏览器控制台打印
  • prompt() 浏览器弹出赋值操作,取过来的值是字符串

变量赋值

  • 变量就是存储一个数据的容器,存在内存里面。
  • 1.声明一个变量,var age;
  • 2.变量赋值 age = 18
  • 3.变量会被重新赋值,原有值就会被覆盖
  • 4.同时申请多个变量: var age,name,address;
  • 5.变量注意事项:
    • 1.如何只声明变量不赋值,打印结果为undefined
    • 2.不声明不赋值,直接使用,报错
    • 3.不声明直接使用,可以使用,由于预编译,将会成为全局变量。不建议这么写。
  • 6.变量的命名规范
    • 有字母开头,或者_ 下划线,美元符号: _name $
    • 严格区分大小写
    • 不能以数字开头
    • 不能是关键字
    • 变量名要有意义
    • 遵循驼峰命名法
  • 7.案例练习,两个变量交换。

数据的类型

  • javascript是一种弱类型或者说是动态语言,这意味着不用提前声明变量的类型,在程序运行过程汇总,类型会被自动确定。
  • 简单数据类型
    • Number
      • 八进制,十六进制
      • 最大值,最小值
      • 三个特殊值
        • Infinity 表示无穷大
        • -Infinity 表示负无穷
        • NaN 非数
          • isNaN() 方法判断是否为数字
    • Boolean
      • true 1
      • false 0
      • 可以参与±运算
    • String
      • 双引号与单引号
      • 转义符号:
        • \n 换行
        • \t tab键,退格符
        • ’ 单引号
      • length获取字符串的长度
      • 字符串拼接 str + str1 + str2
    • Undefined
      • 是false
      • undefined + str = undefinedstr
      • undefined + 1 = NaN
    • Null
      • 是false
      • null + 1 = 1
      • null + str = nullstr
    • 控制台的颜色也可以看见不同类型,有不同颜色。
    • 简单数据间的数据类型转换
      • 转换为字符串
        • var num = 123
          // 数字转换为字符串
          // 1 toString
          var str = num.toString()
          // 2 String
          console.log(String(num));
          // 3 + '' 隐式转换
          console.log(num + '');```
          
      • 转换为数字
        • // 1.parseInt() 重点 取整
          console.log(parseInt(stringNum));
          console.log(parseInt('123px'));
          console.log(parseInt('123px123'));
          console.log(parseInt('px123')); // NaN
          // 2.parseFloat() 重点
          console.log(parseFloat(stringNum))
          // 3.Number()
          console.log(Number(stringNum));
          // 4. - * / 隐式转换 重点
          console.log(stringNum - 0) ```
          
      • 转换为布尔值
        • // 代表空,否定的值会转换为false,如 0 NaN null undefined
          // 其余之都会转换为True
          console.log(Boolean(''));
          console.log(Boolean(0));
          console.log(Boolean(NaN));
          console.log(Boolean(null));
          console.log(Boolean(undefined));
          console.log(Boolean(Infinity)); // true
          console.log(Boolean(-Infinity)); // true
          
  • 复杂数据类型

表达式与返回值

  • 表达式是运算的过程
  • 返回值是运算的结果
  • var num = 1 + 1 , 1+1计算的过程称为表达式,1+1 =2 ;2的这个结果为返回值; 最后再把2赋值给num

运算

  • 运算符
    • ‘+’ ‘-’ * / %(取余) ++ – += -= *= /= %=
    • 注意,浮点数运算里面会有问题 console.log(0.1 + 0.2) // 0.30000000000004
    • 注意,浮点数运算里面会有问题 console.log(0.07 * 100) // 7.00000000000001
    • 未来,不要用浮点数判断是否相等。
  • 算数运算符 加减乘除…
  • 递增和递减运算符
    • 后置递增num++ 口诀:先返回原值,后自加
    • 前置递增++num 相当于 num = num + 1 口诀:先自加,后返回值
      • var num = 10
        var age = 10
        console.log(++num + 10); // 21
        // age++ 先返回原值 再+1,所以age++ 当前还是10
        console.log(age++ + 10) // 20
        console.log(age) // 11
        
      • // 练习1
        var a = 10
        ++a; // ++a 11
        var b = ++a + 2 // 11+1 12 12+2 
        console.log(b) // 14
        // 练习2
        var c = 10
        c++ // 10 10+1 11
        var d = c++ + 2 // 11  11+2 
        console.log(d) // 13 此时的c 12
        // 练习3
        var e = 10
        var f = e++ + ++e // 22
        // 可以如下理解
        // var f = e++ + 0 + ++e // 10 + 12 = 22
        console.log(f)
        
    • num-- --num
  • 比较运算
    • < => <= == != === !==

  • 逻辑运算
    • || 或 &&并且 !非
    • 逻辑与短路运行
    • 逻辑与的运算级别高于逻辑或,先算逻辑与
  • 赋值运算
  • 运算优先等级

流程控制

  • if(){}else{}
  • if(){}else if {} else if{} else{}
  • 三元表达式 age=18?“是”:“否”
  • switch分支控制流程语句
  • 范围判断用if else 固定值用switch
  •   <script>
      numStr = prompt('请输入你的年龄')
      if (numStr + 0 < 18) {
        alert('你的年龄未满18,不能上网')
      } else {
        alert('欢迎光临')
      }
      var key = 1
      // key 与 case value 的值 是全等才会执行。
      // 如果没有break打断,将会一直执行下去。
      switch (key) {
        case 1:
          console.log(1)
          break;
        case 2:
          console.log(2)
          break;
        default:
          console.log('没有数字')
      }
    </script>```
    
    

循环

  • 1.计数器
  • 2.判断条件(表达式)true 继续? false 暂停
  • 3.执行内容
  • <script>
      // for循环
      for (var i = 0; i < 10; i++) {
        console.log(i);
      }
      /* 执行过程:
          var i = 0
          i < 10 判断 成立
          console.log(0)
          i++ 1
          1 < 10 判断 成立
          console.log(1)
          i++
       */
      for (var i = 0; i < 10; ++i) {
        console.log(i);
      }
      // 双循环
      var str = ''
      for (var i = 1; i <= 9; i++) {
        // 第二次循环的最大值是第一次i
        for (var j = 1; j <= i; j++) {
          str = str + i + 'x' + j + '=' + i * j + ' '
        }
        // 循环完结束,进行一个换行
        str = str + '\n'
      }
      console.log(str);
      // 九九乘法表
      /* 1x1=1
      2x1=2 2x2=4 
      3x1=3 3x2=6 3x3=9 
      4x1=4 4x2=8 4x3=12 4x4=16 
      5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 
      6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 
      7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 
      8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 
      9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81  */
    </script>
    <script>
      // while循环
      var numStart = 0
      while (numStart <= 5) {
        numStart++
        console.log('我是while循环')
      }
    </script>
    <script>
      // do while 循环
      // do while 无论如何 都会执行一次代码,因为循环条件被后置了。
      var i = 1
      do {
        // 循环体
        console.log('我是do while循环')
        // 计数器
        i++
      } while (i < 5); // 循环条件
    </script>```
    
    

数组

  • 一组数据的集合叫做数组
  • 创建数组的方式
    • new
    • 字面量定义 []
  • 遍历数组
  • <script>
      // 通过new的方式
      var arry = new Array()
      console.log(typeof arry);
      // console.dir()可以打印出对象的所有对象及方法。
      console.dir(arry);
      console.log(JSON.stringify(arry)) // 利用json打印对象数据的内容
      // 字面量的方式
      var list = []
    </script>
    <script>
      // 遍历数组
      // 1.计数平均数
      var list = [3, 2, 4, 5, 1, 6]
      var len = list.length
      var num = 0
      for (var i = 0; i < len; i++) {
        num = num + list[i]
        console.log(list[i])
      }
      var averageNum = num / len
      // 2.求数组中的最大值
      var maxNum = list[0]
      for (var i = 1; i < len; i++) {
        if (maxNum < list[i]) {
          maxNum = list[i]
        }
      }
      console.log('maxNum:' + maxNum)
      // 3.数组转换为字符串
      var str = ''
      for (var i = 0; i < len; i++) {
        str = str + list[i] + '|'
      }
      console.log(str)
      // 4.数组中新增元素
      // 4.1直接修改length长度,会增加undefined空元素
      // 4.2用下标的方式添加
      var newList = []
      for (var i = 0; i < 10; i++) {
        newList[i] = i
      }
      console.log('数组添加数据:', newList)
    </script>
    <script>
      // 筛选数组
      var arry = [1, 2, 3, 4, 5]
      var newArry = []
      // 外面加一个定时器
      var j = 0
      for (var i = 0; i <= arry.length; i++) {
        if (arry[i] > 3) {
          newArry[j] = arry[i]
          j++
        }
      }
      // 这种写法更秒
      // for (var i = 0; i <= arry.length; i++) {
      //   if (arry[i] > 3) {
      //     newArry[newArry.length] = arry[i]
      //   }
      // }
      console.log(newArry)
    </script>
    <script>
      console.log('数组去重');
      // 数组去重
      // 方法一利用字符串索引
      var list = [1, 2, 3, 4, 5, 4, 3, 4, 1, 2, 3]
      var str = ''
      for (var i = 0; i < list.length; i++) {
        console.log(str.indexOf(list[i]))
        if (str.indexOf(list[i]) < 0) {
          str = str + list[i]
        }
      }
      console.log(str)
      var newList = str.split('')
      console.log('数据去重', newList)
      // 方法二,利用对象
    </script>
    <script>
      // 数组反转
      var list = [1, 2, 3, 4, 5]
      var newArry1 = []
      for (var i = list.length - 1; i >= 0; i--) {
        newArry1[newArry1.length] = list[i]
      }
      console.log('数据反转', newArry1)
    </script>
    <script>
      // 冒泡排序  
      var list = [8, 2, 5, 4, 6, 7, 3, 9]
      // 外层循环时躺数
      for (var i = 0; i <= list.length - 1; i++) {
        // 内层循环时是交换的次数
        for (var j = 0; j < list.length - 1 - i; j++) {
          if (list[j] > list[j + 1]) {
            // temp = 8
            var temp = list[j]
            // list = [8, 2......]
            list[j] = list[j + 1]
            // list = [2.....]
            list[j + 1] = temp
            // list = [2, 8.......]
          }
        }
      }
      console.log('冒泡排序正序', list);
    </script>```
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值