JS基础语法

本文介绍了JavaScript的基础语法,包括变量的声明与赋值、数据类型(如number、string、boolean、undefined等)、运算符的使用,以及类型转换的方法。此外,还详细讲解了分支语句(if、else、switch)、循环结构(while、do-while、for)、函数的定义与调用,以及作用域的概念和作用域链。最后提到了递归函数和事件绑定的基本知识。
摘要由CSDN通过智能技术生成

一、基础语法

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) {
	当条件1true的时候执行的代码段
} else if(条件2) {
    当条件2true的时候执行的代码段      
} else if(条件3){
    当条件3true的时候执行的代码段             
}...
else{
    上面条件都是false的时候执行的代码段
}

多选1执行

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

4、switch多路判断

switch(变量) {
    case1:
        当变量 ===1 的时候执行的代码段
    break
    case2:
        当变量 ===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, ...)

**预解析: **

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

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

注意事项:

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

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

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

匿名函数作用:

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

  2. 自调用

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

作用域

概念:能起到作用的区域

分类:全局和局部

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

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

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

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

作用域链的规则:

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

递归函数:

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

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

事件:

给标签添加行为。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值