JavaScript基础

本文详细介绍了JavaScript的基础知识,包括数据类型、运算符、流程控制、数组、函数、对象以及拓展内容。深入探讨了基本数据类型与引用数据类型的区别,强调了函数的使用、作用域和匿名函数的概念。此外,还讲解了对象的定义、操作和遍历,以及内置对象Math的使用。文章旨在帮助读者全面理解和掌握JavaScript核心概念。

一、数据类型

  • JavaScript 数据类型整体分为:基本数据类型引用数据类型

1. 基本数据类型

  • number 数字型
    • 包括整数、小数、正数、负数
  • string 字符串型
    • 使用单引号,双引号,反引号包裹起来的内容,推荐使用单引号
    • 模板字符串
      let name='zhangsan', age=20
      document.write(`姓名: &{name}, 年龄: &{age}`)
      
  • bool布尔型
    • true, false
  • undefined 未定义型
    • 只有一个值,即undefined
    • 只声明变量,不赋值 的情况下,变量的默认值为 undefined
    • 使用场景:判断数据是否从后端传送过来,可通过监测这个变量是不是undefined
  • null 空类型
    • null 表示 为空
    • 使用场景:
      • 官方:把 null 作为一个尚未创建的对象
      • 大白话:将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null

2. 引用数据类型

  • array 数组
  • object 对象
  • function 函数

3. 数据类型转换

  • typeof 用于检测变量的数据类型
  • 坑:使用 表单、prompt 获取过来的数据默认是 字符串类型 的,此时就不能直接简单的进行加法运算
    let name = 'zhangsan'
    typeof name -->  string
    
  • 隐式转换
    • + 两边只要有一个是字符串,都会把另外一个转换成字符串
    • 除了+ 号以外的算术运算符,比如-*/等都会把数据转成数字类型
    • + 作为正号解析可以转换成number
      '11' + 11 --> 1111
      '11' - 11 --> 0
      typeof +'123' --> number
      
  • 显式转换
    • 转换为数字型
      • Number(数据)
        • 如果字符串内容里面有非数字,转换失败时为 NaN(Not a Number),即不是一个数字
        • NaN 也是number类型的数据,代表非数字
      • parseInt(数据)
        • 只保留整数
      • parseFloat(数据)
        • 可以保留小数
    • 转换为字符型
      • String(数据)
      • 变量.toString(进制)

二、运算符

1. 算术运算符

  • + - * / %

2. 赋值运算符

  • += -= *= /= %=

3. 比较运算符

  • > < >= <= == === !==
    • == 左右两边是否相等。只要求值相等不要求数据类型 一样,即可返回true
    • === 左右两边是否类型和值都相等。是 全等要求值和数据类型 都一样返回的才是true(开发中,请使用===)
    • !== 左右两边是否不全等。比较结果为bool类型,即只会得到true或false
    • tips:
      • 字符串比较的是ASCII码
      • NaN 不等于任何值,包括它本身
      • 尽量不要比较小数,因为小数有精度问题
      • 不同类型之间比较会发生隐式转换

4. 逻辑运算符

  • 用来解决 多重条件 判断
符号名称日常读法特点口诀
&&逻辑与并且符号两边都为true结果才为true一假则假
||逻辑或或者符号两边有一个为true结果就为true一真则真
!逻辑非true遍false false变true真变假 假变真
  • 逻辑运算符中的短路:
    • 在 && 和 || 中,当满足一定条件会让右边的代码不执行
    • && 左边为 false 就短路
    • || 左边为 true 就短路

5. 运算符优先级

  • 越往下优先级越低
    • 小括号(()
    • 一元运算符(++ -- !
    • 算术运算符(先*/%+-
    • 关系运算符(> >= < <=
    • 相等运算符(== != === !==
    • 逻辑运算符(先&&||
    • 赋值运算符(=
    • 逗号运算符(,

三、表达式和语句

1. 表达式和语句区别

  • 表达式计算出一个值
  • 语句用来自行以使某件事发生(做什么事)
  • 某些时候,也可以把表达式理解为语句,因为它是在计算结果,也是做事

2. 程序三大流程控制语句

  • 顺序结构:写几句就从上往下执行几句
  • 分支结构:有的时候要根据条件选择执行代码
  • 循环结构:某段代码被重复执行

3. 分支语句

  • 分支语句:让我们有选择性的执行想要的代码
  • if 分支语句
if(条件1) {
  代码1
}else if(条件2) {
  代码2
}else if(条件3) {
  代码3
}else {
  代码n
}
// 若以上条件都不满足,执行else里的代码
  • 三元运算符
    • 符号:?: 配合使用
    • 语法:条件 ? 满足条件执行的代码: 不满足条件执行的代码
    • 一般用来取值
  • switch 语句
    • switch case 语句一般用于 等值判断,不适合于区间判断
    • switch case 一般需要配合 break 关键字使用,没有 break 会造成 case 穿透
    • 释义
      • 找到跟小括号数据全等的 case 值,并执行里面对应的代码
      • 若没有全等 === 的则执行 default 里面的代码, 例:数据若跟 值2 全等,则执行代码2
    switch(数据){
      case1:
      代码1
      break
      case2:
      代码2
      break
      default:
      代码n
      break
    }
    

4. 循环结构

  • 知识点
    • 循环必备三要素
      • 变量起始值
      • 终止条件(没有终止条件,循环会一直执行,造成死循环)
      • 变量变化值(用自增或自减)
    • 循环结束
      • continue:结束本次循环,结束下次循环
      • break:跳出所在的循环
    • 注意事项
      • 循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程
  • while 循环
    • 释义:
      • 跟 if 语句很像,都要满足 小括号里的条件 true 才会进入执行代码
      • while 大括号里代码执行完毕后不会跳出,而是回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出
    while(循环条件) {
    要重复执行的代码(循环体)
    }
    
  • for 循环
    • for 循环的好处
      • 把声明起始值、循环条件、变化值写到一起,一目了然
    for(声明记录循环次数的变量; 循环条件; 变化值) {
      循环体
    }
    
    • for 循环和 while 循环的区别
      • for 循环: 明确循环的次数
      • while 循环: 不明确循环的次数
    • for 循环嵌套
      • 一个循环里面再套一个循环,一般用在 for 循环里
    for(外部声明的记录循环次数的变量; 循环条件; 变化值) {
      for(内部声明的记录循环次数的变量; 循环条件; 变化值){
        循环体
      }
    }
    

四、数组

1. 定义

  • 数组是一种可以按顺序保存数据的数据类型

2. 数组的基本使用

  • 遍历数组
let names = ['zhangsan', 'lisi', 'wangwu']
for (let i=0; i<name.length; i++) {
  console.log(names[i])
}

3. 操作数组

  • 增:数组添加新的元素
    • arr.push(新增的内容)
      • arr.push() 方法将 一个或多个 元素添加到数组的 末尾,并返回该数组的 新长度
      • 语法:arr.push(元素1, 元素2, ..., 元素n)
    • arr.unshift(新增的内容)
      • arr.unshift() 方法将 一个或多个 元素添加到数组的 开头,并返回该数组的 新长度
      • 语法:arr.unshift(元素1, 元素2, ..., 元素n)
  • 删:删除数组中的元素
    • arr.pop()
      • arr.pop() 方法从数组中删除 最后一个元素 ,并返回 该元素的值
      • 语法:arr.pop()
    • arr.shift()
      • arr.shift() 方法从数组中删除 第一个元素,并返回 该元素的值
      • 语法:arr.shift()
    • arr.splice(操作的下标, 删除的个数)
      • arr.splice() 方法删除指定元素
      • 语法:arr.splice(start, deleteCount)
      • start:起始位置;deleteCount:要删除数组元素的个数(可选),如果没有deleteCount,则默认删除start之后的全部数据
  • 改:重新赋值
    • 数组[下标] = 新值
  • 查:查询/访问数组中的元素
    • 数组[下标]
  • 小结
说明push()unshift()pop()shift()splice()
位置在末尾添加元素在开头添加元素在末尾删除元素在开头删除元素指定删除元素位置
参数可以添加一个或多个数组元素可以添加一个或多个数组元素不带参数不带参数带参数(起始位置,删除个数)
返回值数组新长度数组新长度删除元素的值删除元素的值以数组的形式返回删除的元素

五、函数

1. 定义

  • function,执行特定任务的代码块
  • 可以实现代码复用,提高开发效率

2. 函数使用

  • 声明语法
function 函数名() {
  函数体
}
  • 函数名 - 命名规范
    • 和变量名基本一致
    • 尽量小驼峰式命名法
    • 前缀应该为动词
    • 命名建议:常用动词约定
动词含义
can判断是否可执行某个动作
has判断是否含有某个值
is判断是否为某个值
get获取某个值
set设置某个值
load加载某些数据
  • 函数调用
    • 注意: 声明(定义)的函数必须调用后才会真正被执行,使用()调用函数
    • 语法:函数名()
  • tips
    • 函数声明function
    • 函数调用函数名()
    • 函数执行函数不调用不执行
    • 函数的复用代码:随时调用,随时执行,可重复调用
    • 循环重复代码:循环代码写完即执行,不能很方便控制执行位置

3. 函数参数

  • 函数可分为 形参实参
    • 形参:函数声明时,小括号里面的是形参,形式上的参数
    • 实参:函数调用时,小括号里面的是实参,实际的参数
    • 尽量保持形参和实参的个数一致
    • 多个参数中间使用逗号隔开

4. 函数返回值

  • 函数是被设计为 执行特定任务的代码块
  • 返回值:把 处理结果 返回给 调用者
  • 当函数需要返回数据出去时,用 return 关键字
  • return 数据
    • 在函数中使用 return 关键字将内部的执行结果交给函数外部使用
    • 函数内部只能出现一次 return,并且 return 后面的代码不会再被执行,所以 return 后面的数据不要换行写
    • return 会立即结束当前函数
    • 函数可以没有 return,这种情况 函数默认返回值为 undefined

5. 作用域

  • 全局作用域
    • 全局有效
    • 作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件
    • 函数外部 let 的变量:全局变量在 任何区域都可以访问和修改
  • 局部作用域
    • 局部有效
    • 作用于函数内的代码环境,就是局部作用域
    • 因为跟函数有关系,所以也称为函数作用域
    • 函数内部 let 的变量:局部变量只能在 当前函数内部访问和修改
  • 块级作用域
    • {}内有效
    • 块级作用域由{}包括,if 语句和 for 语句里面的{}
    • {}内部 let 的变量:let 定义的变量,只能在块级作用域里访问不能跨块访问也不能跨函数访问
  • 变量有一个坑,特殊情况:
    • 如果函数内部或者块级作用域内部,变量没有声明,直接赋值,也当做全局变量看,但是强烈不推荐
    • 但是有一种情况,函数内部的形参可以看做是局部变量
  • 变量访问的原则
    • 作用域链:采取 就近原则 的方式来查找变量最终的值

6. 匿名函数

  • 匿名函数

    • 将匿名函数赋值给一个变量,并且通过变量名称进行调用,我们将这个称为函数表达式
    • 语法和调用:
    // 语法
    let fn = function(){
      函数体
    }
    // 调用
    fn()
    
  • 函数立即执行

    • 场景介绍:避免全局变量之间的污染
    // 方式1
    (function() {console.log(111)})();
    // 方式2
    (function() {console.log(222)} ());
    // 不需要调用,立即执行
    
    • 注意:
      • 立即执行函数的作用:防止变量污染
      • 立即执行函数无需调用,立即执行(其实本质已经调用了)
      • 多个立即执行函数之间用分号;隔开,不然会报错

六、对象

1. 定义

  • 定义
    • 对象是一种数据类型
    • 无序的数据的集合
  • 特点
    • 无序的数据的集合
    • 可以详细的描述某个事物

2. 对象使用

  • 声明

    • 对象 是由 属性方法 组成的
    let 对象名 = {
      属性名: 属性值,
      方法名: 函数
    }
    let person = {
      name: 'Lucky',
      age:20,
      sex: 'male',
      sayHi: function() {
        document.write('Hello world')
      }
    }
    
  • 属性

    • 属性都是成对出现的,包括 属性名属性值,它们之间使用:分隔
    • 多个属性之间使用,分隔
    • 属性就是依附在对象上的变量(外面是变量,对象内是属性)
    • 属性名可以使用""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
    • 属性访问:使用.[]获得对象中属性对应的值,称之为属性访问
    let person = {
      name: 'Lucky',
      age: 18
    }
    console.log(person.name)
    console.log(person['age'])
    
  • 方法

    • 方法是由 方法名函数,它们之间使用:分隔
    • 多个方法之间使用英文,分隔
    • 方法是依附在对象中的函数
    • 方法名可以使用""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
    • 方法访问:使用.调用对象中的函数,称之为方法调用。千万别忘了给方法名后面加 小括号
    let person = {
      name: 'Lucky',
      sayHi: function() {
        console.log('Hello World!!')
      }
    }
    person.sayHi()
    增加属性
    person.age = 18
    person.move = function() {
      console.log('move move move')
    }
    

3. 操作对象

    • 对象增加新的数据
    • 对象名.新属性名 = 新值
    • 无论是属性还是方法,同一个对象中出现名称一样的,后面的会覆盖前面的
    let person = {
      name: 'Lucky',
      sayHi: function() {
        console.log('Hello World!!')
      }
    }
    person.age = 19
    person.move = function() {
      console.log('move... move...') 
    }
    
    • 删除对象中属性
    • delete 对象名.属性名
    • 重新赋值
    • 对象.属性 = 值
    • 对象.方法 = function () {}
    • 查询对象
    • 对象.属性 或者 对象[‘属性’]
    • 对象.方法()

4. 遍历对象

  • 一定记住k 是获得对象的属性名,对象名[k]是获得属性值
let obj = {
  name = 'Lucky',
  age = 20,
  sex = 'female'
}
// 遍历对象
for (let k in obj) {
  console.log(k)
  console.log(obj[k])
}

5. 内置对象

  • Math
    • 提供了一系列做数学运算的方法
    • 方法有:
      • random:生成0~1之间的随机数(包括0不包括1)
      • ceil:向上取整
      • floor:向下取整
      • max:找最大值
      • min:找最小值
      • pow:幂运算
      • abs:绝对值

七、拓展

1. 术语解释

术语解释举例
关键字在JavaScript中有特殊意义的词汇let、var、function、if、else、switch、case、break
保留字在目前的JavaScript中没意义,但未来有可能会具有特殊意义的词汇int、short、long、char
标识(标识符)变量名、函数名的另一种叫法
表达式能产生值的代码,一般配合运算符出现10+3、age>=18
语句一句代码也称之为一条语句,一般按用途还会分类:输出语句、声明语句、分支语句

2. 基本数据类型和引用数据类型

  • 简单类型 又叫做 基本数据类型 或者 值类型
  • 复杂类型 又叫做 引用类型
  • 值类型
    • 在存储时变量中存储的是 值本身
    • string、number、boolean、undifined、null
  • 引用数据类型
    • 复杂数据类型,在存储时变量中存储的仅仅是 地址(引用)
    • 通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等
  • 堆栈空间分配区别
    • (操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈;

    • 值类型 存放到栈里面

    • 值类型的数据直接存放在变量(栈空间)中
      在这里插入图片描述

    • (操作系统):存放复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收;

    • 引用数据类型 存放到堆里面

    • 引用数据类型变量(栈空间)存放的是地址,真正的对象实例存放在堆空间中
      在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值