JavaScript基础学习笔记

JavaScript基础学习笔记

JavaScript介绍

JavaScript是什么

JavaScript(简称js)是一种运行在客户端的脚本语言

Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。 javaScript最初受Java启发而开始设计的,目的之一就是"看上去像Java",因此语法上有类似之处,一些名称和命名规范也借自Java。JavaScript与Java名称上的近似,是当时Netscape为了营销考虑与Sun微系统达成协议的结果。Java和JavaScript的关系就像张雨生和张雨的关系,只是名字很像。

JavaScript的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

JavaScript最初的目的

最初的目的时为了处理表单的验证操作

JavaScript现在的意义(应用场景)

  • 网页特效
  • 服务端开发(Node.js)
  • 命令行工具(Node.js)
  • 桌面程序(Electron)
  • App(Cordova)
  • 控制硬件——物联网(Ruff)
  • 游戏开发(cocos2d-js)

JavaScript和HTML、CSS的区别

  • HTML:提供网页的结构,提供网页中的内容
  • CSS:用来美化网页
  • JavaScript:可以用来控制网页内容,给网页增加动态的效果

JavaScript的组成

ECMAScript:描述了JS的语法和基本对象

DOM:处理网页内容的方法和接口

BOM:与浏览器交互的方法和接口

变量

什么是变量

变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据,使用变量可以方便的获取或者修改内存中的数据。

如何使用变量

  • var声明变量
var age;
  • 变量赋值
var age;
age = 18
  • 同时声明多个变量
var age,name,sex;
age = 10;
name = "赵四"
  • 同时声明多个变量并赋值
var age = 10,naem = "赵四"
  • 输出数值
console.log(name)

变量的命名规则和规范

规则:必须遵守的,不遵守会报错

  • 由字母、数字、下划线、$符号组成,不能以数字开头

  • 不能是关键字和保留字,例如: for、while。

  • 区分大小写

规范:建议遵守的,不遵守不会报错

  • 变量名必须有意义

  • 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。例如: userName、 userPassword

数据类型

简单数据类型

Number、String、Boolean、Undefined、Null

Number类型

  • 数值字面量:数值的固定值的表示法

    110 1024 60.4

  • 进制

  • 浮点数

浮点数的精度问题

  • 数值范围

  • 数值判断

    NaN:not a number

    ​ NaN与任何值都不相等,包括他本身

    isNaN:is not a number

String类型

'abc' "abc"

  • 字符串字面量

    程序猿,'程序媛, "黑马程序猿”

    思考:如何打印以下字符串。

    我是一个“正直"的人

    我很喜欢"黑马'程序猿'"

  • 转义符

  • 字符串长度

    length属性用来获取字符串的长度

  • 字符串拼接

    字符串拼接使用 + 连接

1、两边只要有一一个是字符串,那么+就是字符串拼接功能

2、两边如果都是数字,那么就是算术功能。

Boolean类型

  • Boolean字面量:true和false, 区分大小写

  • 计算机内部存储:true为1, false为0

Undefined和Null

1、undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined

2、null表示一-个空,变量的值如果想为null,必须手动设置

复杂数据类型

​ Object

获取变量的类型

typeof

字面量

在源代码中一个固定值的表示法。

数值字面量:8,9,10

字符串字面量:黑马程序员',"大前端”

布尔字面量:true, false

注释

单行注释

用来描述下面一个或多行代码的作用

多行注释

用来注释多行代码

数据类型转换

如何使用谷歌浏览器,快速的查看数据类型?

字符串的颜色是黑色的,数值类型是蓝色的,布尔类型也是蓝色的,undefined和null是灰色的

转换成字符串类型

  • toStrin()

  • String()

  • 拼接字符串方式

num + "", 当+两边一个操作符是字符串类型,一个操作符是其它类型的时候,会先把其它类型转换成字符串再进行字符串拼接,返回字符串

转换成数值类型

  • Number()

  • parselnt()

  • parseFloat()

  • +,-0等运算符

转换成布尔类型

  • Boolean()

0 "(空字符串) null undefined NaN会转换成false其它都会转换成true

操作符

运算符 operator

5+6

表达式 组成 操作数和操作符,会有一个结果

算术运算符

+	-	*	/	%

一元运算符

一元运算符:只有一个操作数的运算符

5+6 两个操作数的运算符二元运算符

++ 自身加1

-- 自身减1

  • 前置 ++

  • 后置++

总结
前置++:先加1,后参与运算
后置++:先参与运算,后加1
上面两个理解后,‘ 下面两个自通
前置--:先减1,后参与运算
后置--:先参与运算,后减1

逻辑运算符(布尔运算符)

关系运算符(比较运算符)

赋值运算符

= += -= *= /= %=

运算符的优先级

表达式和语句

表达式

一个表达式可以产生一个值,有可能是运算、函数调用、有可能是字面量。表达式可以放在任何需要值的地方。

语句

语句可以理解为一个行为,循环语句和判断语句就是典型的语句。一个程序有很多个语句组成,一般情况下;分割一个一个的语句

流程控制

程序的三种基本结构

顺序结构

从上到下执行的代码就是顺序结构

程序默认就是由上到下顺序执行的

分支结构

根据不同的情况,执行对应的代码

循环结构

循环结构,重复做一件事情

分支结构

if语句

语法结构

三元运算符

switch语句

布尔类型的隐式转换

流程控制语句会把后面的值隐式转换成布尔类型

循环结构

在javascript中,循环语句有三种,while、 do..while、for循环。

while语句

基本语法:

代码示例:

do...while语句

do..while循环和while循环非常像,二者经常可以相互替代,但是do..while的特点是不管条件 成不成立,都会执行一次。

基础语法:

代码示例:

for语句

while和do..while一般用来解决无法确认次数的循环。for循环一 般在循环次数确定的时候比较方便

基本语法:

执行顺序:1243 ---- 243 ---43(直到循环条件变成false)

1.初始化表达式

2.判断表达式.

3.自增表达式

4.循环体

continue和break

break:立即跳出整个循环,即循环结束,开始执行循环后面的内容( 直接跳到大括号)

continue:立即跳出当前循环,继续下一次循环(跳到1++的地方)

数组

为什么要学习数组

之前学习的数据类型,只能存储一个值(比如:Number/String.。我们想存储班级中所有学生的姓名,此时该如何存储?

数组的概念

所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数組。

数组的定义

数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整

通过数组字面量创建数组

获取数组元素

数组的取值

遍历数组

遍历:遍及所有,对数组的每一 个元素都访问一次就叫遍历。

数组遍历的基本语法:

数组中新增元素

数组的赋值

函数

为什么要有函数

如果要在多个地方求1-100之间所有数的和,应该怎么做?

什么是函数

把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在后续开发中可以反复调用

函数的作用就是封装一段代码,将来可以重复使用

函数的定义

  • 函数声明

  • 函数表达式

特点:

函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。
函数一般都用来干一件事情,需用使用动词+名词,表示做一件事情 tellstory sayHello 等

函数的调用

  • 调用函数的语法:

  • 特点:

函数体只有在调用的时候才会执行,调用需要()进行调用。
可以调用多次(重复使用)

函数的参数

函数的返回值

当函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个返回值

返回值语法:

函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。

返回值详解:

arguments的使用

JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的-个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象 中存储了传递的所有的实参。arguments是一 个伪数组, 因此及可以进行遍历

函数其他

匿名函数

匿名函数:没有名字的函数

自调用函数

函数是一种数据类型

代码范围

作用域

作用域:变量可以起到作用的范围

全局变量和局部变量

  • 全局变量

    在任何地方都可以访问到的变量就是全局变量,对应全局作用域

  • 局部变量

    只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域)

块级作用域

任何一对花括号( {和} )中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级
作用域。

在es5之前没有块级作用域的的概念,只有函数作用域,现阶段可以认为JavaScript没有块级作用域

词法作用域

变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用
域也叫做静态作用域。

在js中此法作用域规则:

  • 函数允许访问函数外的数据
  • 整个代码结构中只有函数可以限定作用域
  • 作用域规则首先使用提升规则分析
  • 如果当前作用规则中有名字了,就不考虑外面的名字

作用域链

预解析

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析 器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

预解析过程:
1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3.先提升var,在提升function

JavaScript的执行过程

全局解析规则

函数内部解析规则

变量提升

  • 变量提升

    定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。

  • 函数提升

    JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面


posted @ 2021-12-04 20:04  BreakRabbit  阅读(75)  评论(0)    收藏  举报