美文网首页
基础语法

基础语法

作者: 升龙无涯 | 来源:发表于2023-02-22 11:57 被阅读0次

    基础语法

    一、基础语法

    1、变量

    概念:内存中存储数据的一个容器。

    声明方式:

    var 变量名 // 在内存中开辟了一个空间
    var 变量名 = 值 // 内存中开辟空间并放入数据
    

    变量名的规则:变量名由字母、数字、下划线、美元符号、汉字组成,不能用数字开头,不能将关键字作为变量名。

    关键字:

    var typeof isNaN Number String Boolean Object Array Function function break if else switch case default for while do continue in of Date top window new this Math
    

    =在代码中不叫等于赋值符。左边一定是一个即将放入数据的变量,右边一定是具体的数据或能得到具体数据的表达式,作用是将右边的数据放入左边的变量中。

    2、数据类型

    js中的数据类型:

    • number:数字类型

      isNaN(数据) - 判断数据转成数字是否是NaN

      小数计算不精准:

      原因:计算机内部对数字的处理要转成二进制,小数转二进制有时会转成无限死循环,导致计算机存储小数不精准,所以计算结果也不精准。

      解决:

        ① 先乘以10的n次方将两个数字都转成整数,计算,除以10的n次方
      
        ② 数字.toFixed(数字) - 强制保留小数点后几位
      
    • string:字符串类型

      字符串可以进行+运算,将两个小字符串拼接成更大的字符串

      用document.write输出标签,必须将标签当做字符串输出,才能在页面中解析标签

      单引号字符串不能嵌套单引号字符,双引号字符串不能嵌套双引号字符,除非将引号字符转义:\

    • boolean:布尔值 - 描述一个条件的成立与不成立,只有两个数据:true/false

    • undefined:未定义 - 当一个变量定义了但没有赋值,值就是undefined(浅灰色),类型也是undefined(黑色字符串)

    • object:对象 - 复杂的数据,一个空间存储多个数据

    • function:函数 - 存储一段代码的变量

    3、运算

    • 算术运算

      符号:

      + - * / %
      
    • 赋值运算

      +=  -=  *=  /=  %=
      

      是简写

    • 比较/关系运算

      > >= < <= == === != !==
      

      !=和!==是==和===的取反

    • 逻辑运算

      &&   ||   !
      

    4、类型转换

    4.1、隐形转换

    • +左右两边有一个是字符串,另一个也会转成字符串进行拼接
    • 算术运算符号会将左右两边都转成数字进行算数运算
    • 比较运算左右两边有一个是数字,另一个也会转成数字进行数字的大小比较
    • 数据放在分支语句的小括号,会隐形转成布尔类型
    • 非字符串数据作为对象的属性,会隐形转成字符串类型

    4.2、强制转换

    • 转数字

      Number(数据):

      转成数字纯数字字符串

      空字符串、null、[]转成0,其余数据都转成NaN

      parseInt(数据):只有整数开头的字符串能转成整数,其余的都是NaN

      parseFloat(数据):只有数字开头的字符串能转成数字,其余的都是NaN

    • 转布尔类型

      Boolean(数据):0、空字符串、null、undefined转成false,其余的都是true

    • 转成字符串

      String(数据):数组转字符串,去除了[];对象转字符串 - '[object Object]'

      数据.toString():null和undefined不能使用,其余的结果跟上面一样

    二、分支语句

    概念:做判断的结构

    1、单分支

    if(条件) {
       当条件为true的时候执行的代码段
    }
    

    2、双分支

    if(条件) {
       当条件是true的时候执行的代码段
    } else {
       当条件为false的时候执行的代码段
    } 
    

    3、多分支

    if(条件1) {
        当条件1是true的时候执行的代码段
    } else if(条件2) {
        当条件2是true的时候执行的代码段      
    } else if(条件3){
        当条件3是true的时候执行的代码段             
    }...
    else{
        上面条件都是false的时候执行的代码段
    }
    

    多选1执行

    第一个不成立,才会去执行第二个。。。

    4、switch多路判断

    switch(变量) {
        case 值1:
            当变量 === 值1 的时候执行的代码段
        break
        case 值2:
            当变量 === 值2 的时候执行的代码段
        break
        ....
        default:
            上面条件都不成立的时候执行的代码段
    }
    

    break可以省略,后续的case不判断,直接执行

    default可以省略

    多路判断比多分支效率高,只判断一次

    多路判断只能判断 全等

    5、三元运算

    能且仅能简化简单的双分支

    条件 ? 条件是true的时候执行的代码 : 条件是false的时候执行的代码
    

    整个三元运算表达式可以当做是一个具体的数据,进行输出、赋值

    例:

    num = num.length === 1 ? '0'+num : num
    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
    

    三、循环结构

    学习目的:简化重复

    1、while

    while(条件) {
        条件是true的时候重复执行的代码段
    }
    

    2、do-while

    do{
        代码段 - 先执行一次,然后判断条件,后续是否执行就看条件是否为true
    }while(条件)
    

    3、for

    for(初始值定义语法; 条件; 变化) {
        条件为true的时候重复执行的代码段
    }
    

    重点:循环执行的过程

    四、函数

    理解:存储一段代码的容器

    定义语法:

    function 函数名(形参1, 形参2, ...) { // 形参就是变量名
        // 形参就相当于在函数内提前定义好的变量
        // 如果没有实参给形参赋值 - 形参默认是undefined
        // 形参可以直接给赋值 - 形参有默认值 - 只能放在最后
        代码段
        // 如果函数调用后需要得到一个结果 - 必须return 结果
        // return 可以阻止代码向下执行
    }
    

    函数名的规则:跟变量名的规则一样

    调用语法:

    var 变量 = 函数名(实参1, 实参2, ...)
    

    <font color="red">**预解析: **</font>

    概念:代码在执行之前先进行解析

    过程:从当前作用域找所有变量定义和函数定义,找到后将变量定义和函数定义的代码提升到当前作用域的最前面。代码按照提升后的顺序执行。

    注意事项:

    1. 只提升定义,不提升赋值
    2. 当变量名和函数名同名,保留函数,忽略变量
    3. 预解析一定在执行之前 - 不会执行的代码中如果有变量和函数的定义,也会预解析
    4. 全局有全局预解析,局部也有局部的预解析
    5. 局部如果有形参,先给形参赋值,再进行预解析,且预解析的函数跟形参同名,函数会覆盖掉形参的值
    6. 代码报错以后的代码就不再执行了 - 如果代码中有报错,就无法阻止默认行为了
    7. 连等特殊语法:var a = b = 9 相当于:var a = 9 b = 9

    函数的本质:就是一个特殊变量,存储了一段代码,可以通过变量名()执行这段代码

    匿名函数:将一个函数赋值给变量使用 - 这个变量的类型是function,值就是这一段代码 - 原本函数中的名字就失效了 - 这样没有名字的函数就叫匿名函数

    匿名函数作用:

    1. 将匿名函数赋值给变量使用

    2. 自调用

      (function(形参) {
          
      })(实参)
      

    <font color="red">作用域</font>

    概念:能起到作用的区域

    分类:全局和局部

    在全局中定义的变量叫全局变量 - 可以在任何地方使用

    在局部中定义的变量叫局部变量 - 只能在局部中使用

    重点:全局不能访问局部变量,局部可以访问全局变量

    作用域链:作用域会发生嵌套,这样形成一条链式结构叫作用域链。

    作用域链的规则:

    1. 将一个变量当做具体数据使用(输出、让他去运算)的时候,先在当前作用域中找这个变量的定义,如果没有,就去上级作用域中找,。。。直到全局,全局没找到,报错:XX is not defined
    2. 给一个变量赋值,先在当前作用域中找变量的定义,如果没有,就去上级作用域中找,。。。直到全局,全局没找到,就在全局定义这个变量并赋值 - 省略var定义变量

    递归函数:

    概念:在函数内调用自己 - 形成循环

    注意事项:一定要添加停止的条件

    事件:

    给标签添加行为。

    标签.on类型 = 一段函数代码
    

    一段函数代码可以是匿名函数,也可以用函数名表示。一定不是函数调用的语法。

    相关文章

      网友评论

          本文标题:基础语法

          本文链接:https://www.haomeiwen.com/subject/vkclyrtx.html