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解析器首先会把当前作用域的函数声明提前到整个作用域的最前面



浙公网安备 33010602011771号