JS基础语法

1、js常用输出语句有三个

1.1 document.write("内容") 把指定内容输出到body标签中 可以解析HTML标签

1.2 console.log("内容") 把指定内容输出到浏览器调试工具的控制台中 无法解析HTML标签 我们经常会使用console.log调试bug

1.3 window.alert("内容") 以弹窗的形式输出内容 无法解析HTML标签 window对象的属性或者方法都可以省略window对象 也就是window.alert()可以直接写成alert()

1.4 注意: 如果"内容"是纯数字或者js中的关键字 可以不加引号, 其他内容都需要加一对双引号或者单引号包裹

2、js一般写在script标签, script也属于HTML标签, 所以script标签可以出现页面文档的任何地方和出现任意次。但是, script标签一般都是写在head标签中。

3、书写位置

3.1 嵌入式

3.1.1 JavaScript的书写位置-嵌入式就是把js代码写script标签中

3.1.2 另外, console.log()可以同时输出多个值, 每个值之间使用"逗号"隔开 多个值会在控制台中同一行显示

3.2 外链式

3.2.1 JavaScript的书写位置-外链式就是把js代码写在单独的js文件中

3.2.2 外链式js文件是通过script标签的src属性引入

3.2.3 注意: 不要在引入js文件的script标签中,写js代码; 因为写的js代码不会生效

3.3 行内式

3.3.1 JavaScript的书写位置-行内式,就是把js代码写在标签的事件属性中, onclick, onmouseover和onmouseout就是事件属性, 事件属性里面对应的代码,需要事件被触发以后才会执行 比如onclick需要鼠标左键点击才可以触发

4、JavaScript介绍
4.1 为什么要学习Javascript

我们之前学的HTML只能完成页面的结构,CSS完成页面的样式, HTML+CSS静态页面,没有任何页面效果的,页面也没有行为,如果想要页面有行为,比如某个元素可以被点击, 那么就需要学习JS,给页面某个元素添加行为。

4.2 JavaScript是什么

4.2.1 官方概念:这是一个跨平台的脚本语言

4.2.1.1 平台这里指的是操作系统(window系统, mac系统 , linux系统)

4.2.1.2 跨平台的意思就是在不同的操作系统下, 都可以运行

4.2.1.3 脚本语言意思是js不能单独运行,需要有一个运行环境,这个运行环境就是js的运行环境,比如浏览器环境,node.js环境

4.2.1.4 为什么js可以跨平台,因为在不同操作系统下, 都有浏览器, 有浏览器就可以运行JS代码

4.3 Javascript的发展历史

1995年,由一个名为布莱登·艾奇创造的脚本语言,原名livescript; 以前js为了验证表单信息

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

4.4.1 网页特效 比如图片轮播,选项卡....

4.4.2 服务端开发(Node.js)

4.4.3 命令行工具(Node.js)

4.4.4 桌面程序(Electron)

4.4.5 App(Cordova)

4.4.6 控制硬件-物联网(Ruff)

4.4.7 游戏开发(cocos2d-js , 贪吃蛇 , 微信打飞机....)

4.4.8 表单验证

4.4.9 与服务器进行交互(ajax->谷歌于2005年推出的)

5、JavaScript和HTML、CSS的区别

5.1 HTML:提供网页的结构,提供网页中的内容

5.2 CSS: 用来美化网页

5.3 JavaScript: 可以用来控制网页内容,控制样式, 给网页增加动态的效果

6、JavaScript的组成

ECMAScript - JavaScript的核心

ECMA 欧洲计算机制造联合会

网景:JavaScript

微软:JScript

定义了JavaScript的语法规范

JavaScript的核心,描述了语言的"基本语法"和"数据类型",ECMAScript是一套标准,定义了一种语言的标准与具体实现无关

7、DOM - 文档对象模型

7.1 一套操作页面元素的API

7.2 DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作

8、BOM - 浏览器对象模型

8.1 一套操作浏览器功能的API

8.2 通过BOM可以操作浏览器窗口,比如:控制浏览器跳转、获取分辨率、获取浏览器的可视区域大小等

9、注释

9.1 // JS注释分为单行注释与多行注释(块注释)

9.2 // 被JS注释的代码,不会执行

9.3 // 单行注释 ctrl+/

9.4 /* 多行注释 */

10、JS代码的语法规则

10.1 JavaScript严格区分英文字母大小写

10.2 JavaScript脚本程序需嵌入在HTML文件中才可以执行代码(当然现在也可以用node.js执行单独的js文件)

10.3 JavaScript脚本程序可以独立保存为一个外部文件 这个文件是不能自己运行的它必须要依赖于HTML文件或者node.js环境

10.4 JavaScript脚本程序中不能包含HTML标记代码

10.5 每条语句末尾如果加分号一定是"英文"状态下的分号(;),最好加分号,不要省略

10.6 一行写了多条JS语句 这个时候每一条语句就必须要加分号(最后一条语句可以不加分号)

11、变量

11.1 变量就是可以变化的量, 变量是一个容器, 方便存取数据

11.2 创建变量(定义变量,声明变量)

11.2.1 语法一: 定义单个变量, 变量不赋值

// var 变量名;

var a;

// 使用变量,就是直接使用变量名即可,变量名就可以代表这个变量的值

11.2.2 语法二 :定义多个变量, 变量不赋值

// var 变量名1, 变量名2, 变量名3 ... ;

11.2.3 语法三: 定义单个变量, 变量并赋值

// var 变量名 = 值;

11.2.4 语法四 :定义多个变量, 变量并赋值

// var 变量名1 = 值1, 变量名2 = 值2, 变量名3 = 值3 ...;

11.2.5 注意: 如果变量名声明了,但是没有赋值,那么这个变量的值是会undefined

11.2.6 注意: = 号是赋值运算符, 把=号右边的值,赋值给左边的变量; 那么以后这个变量名就可以代表这个值

11.2.7 修改变量的值, 就是更新变量的值, 通过 =号 赋值运算符

11.3 变量的命名规则和规范
11.3.1 规则 - 必须遵守的,不遵守会报错

11.3.1.1 由字母(A~Za~z)、数字(0~9)、下划线(_)、$符号组成,不能以数字开头

11.3.1.2 多个单词可以使用驼峰法

11.3.1.3 多个单词可以使用下划线连接法

11.3.1.4 不能是JS中关键字和保留字,例如:for、while等(其中变量名为name需要注意,不会报错,但是不推荐使用,因为name是window对象下的一个属性, 不管设置的属性值是什么, 都会被加上双引号,成为字符串类型)

11.3.1.5 区分大小写

11.3.2 规范 ( 建议遵守的,不遵守不会报错)

11.3.2.1 变量名需要有意义,希望大家在声明变量的时候变量名要做到"见名知意"

11.3.2.2 变量名可以由多个英文单词组成 建议使用下划线连接法 或者是驼峰法

11.3.2.3 下划线连接法 每一个单词之间使用下划线进行连接 比如:get_user-name

11.3.2.4 驼峰法 第一个英文单词的首字母全部小写 第二个开始其它的英文单词首字母大写 比如:getUserName

12、变量的数据类型

12.1 为什么变量需要有数据类型

12.1.1 变量主要是用于存储数据的,现实生活中的数据有很多种比如有数值、有字母等等 那么为了将这些数据进行分门别类,所以就引出了变量的数据类型。

12.1.2 JavaScript是一种弱类型的语言。 在声明变量的时候不需要指定变量的数据类型强类型的语言,在声明变量的时候一定要先指明这个变量的数据类型是什么 并且值也是这个数据类型

12.1.3 因为JS是一门弱类型的脚本语言,"在声明变量的时候不需要先声明变量的类型"。但是它也是有类型,JS变量的类型是由"变量的值"来决定 。

12.2 变量的数据类型分为:两大类、七小种 

12.2.1 两大类:

12.2.1.1 基本数据类型(标量数据类型,值类型)

12.2.1.2 复合数据类型(引用数据类型,对象类型)!

12.2.2 七小种:

12.2.2.1 基本数据类型: 字符串,数值,布尔,未定义型,空型

// 基本数据类型:只能存储一个值

基本(标量)数据类型包括如下:
1. 字符串(string)

// 只要值被一对引号(不管双引号还是单引号)包裹, 那么就是字符串

2. 数值(number)

// 数值包括 整数(正整数,负整数), 小数(正小数,负小数), 0, 以及 NaN关键字

// 备注: NaN当数据类型强制转换数值类型失败的时候,就会得到NaN(not a number)关键字

3. 布尔(boolean)

// 布尔值 只有两个 true(表示真,成立) 和 false(表示假,不成立)

4. 未定义(undefined)

// 得到未定义的情况有很多,列几个常见情况给大家

// 4.1 定义变量,不赋值,那么变量的值就为undefined

// 4.2 定义变量,赋值为undefined

// 4.3 访问不存在的数组元素值

// 4.4 访问不存在的对象属性

// 4.5 函数没有返回值

5. 空型(null)

// 得到空型的方式主要给变量赋值一个null 或者 dom对象获取失败也会返回null

// 注意: typeof null的结果不是null, 而是object

12.2.2.2 复合数据类型: 数组,对象

// 复合数据类型:至少存储一个值,可以存储多个值

12.2.3 在JavaScript中有一个内置的函数可以检测变量的数据类型

12.2.3.1 语法一: typeof( 值或者变量名 )

12.2.3.2 语法二: typeof 值或者变量名

12.2.4 字符串类型细节

12.2.4.1 字符串中不允许双包双,单包单; 但是允许双包单, 允许单包双

12.2.4.2 也可以使用转义符 转义符是反斜杠\ 进行一些符号的转义

12.2.4.3 获取字符串的长度:

通过字符串变量名.length 可以获取字符串的总字符个数

12.2.4.4 字符串拼接:

// 字符串拼接就是把小字符串拼成大字符串, 每次拼接都会拼接到后面

// 字符串拼接是使用+号,但是在js中的+号会分情况:

// 情况1: 如果加号左右两个都是数值,那么+号就是加法运算

// 情况2: 如果加号左右两个有一个是字符串,那么+号就是字符串连接运算符

12.2.4.5 运算符

运算符就是可以运算的符号

13、运算符分类
1. 算术运算符 + - * / %(求余数, 取模)
2. 自操作运算符 ++ --

// 自加运算符(自己加1) ++

// 分为前加加跟后加加

// 自减运算符(自己减1) --

// 分为前减减跟后减减

// 自加运算符和自减运算符的用法几乎一样

结论:

1. 不管前加加还是后加加,最终结果都会加1

2. 如果有其他代码跟加加一起使用, 后加加, 把值先拿去参与运算, 自己再加1

3. 如果有其他代码跟加加一起使用, 前加加, 把值先进行加1以后, 再参与运算

3. 赋值运算符 = += -= *= /= %=

// 赋值运算符主要作用就是赋值

/* var a; // 声明变量,但是不给变量赋值,那么这个变量默认的值为undefined

// 对a进行赋值操作 把 = 号右边的值赋予给左边的变量名

4. 字符串连接运算符 + +=

// +和+= 需要左右两个运算符至少有一个是字符串类型, 那么+和+=才会是字符串连接运算符

5. 比较运算符 > < >=

> 大于

< 小于

>= 大于等于

== 等于

!= 不等于

=== 全等

!== 不全等

5.1 比较运算符的结果是布尔值(true或者false)

5.2 == 等于, "比较值是否相等"

5.3  进行比较时,运算符==会考虑其操作数(要比较的两个值)的类型。如果两个值的类型相同,就直接进行比较,如果两个值的类型不同,则尝试将它们转换为相同的类型,再进行比较

5.4 注意: 等于判断不要用= , 因为=号是赋值运算符

5.5 === 全等于, 先比较"数据类型"是否相同, 如果不相同, 直接返回false; 如果"数据类型"相同,再进行值的比较

5.6 === 全等于,需要类型和值都相等,才会返回true

!= 不等于

!== 不全等

6. 逻辑运算符 && || !

6.1 逻辑与&& 表示并且的关系 需要&&左右两边都为true的时候,最终得到true

6.2 逻辑或|| 表示或者的关系 ||左右只有一个为true的时候,最终得到true

6.3 逻辑非! 表示取反的关系 !true=>false !false=>true

7. 三目运算符 条件表达式 ? 语句1:语句2

语法:

// 条件表达式 ? 语句1 : 语句2;

// 如果条件表达式成立,执行语句1;

// 如果条件表达式不成立,执行语句2;

// 说明: 条件表达式就是可以得到布尔值的式子

8. 运算符的优先级

为什么会有运算符的优先级这个问题?

在一个式子里面出现了"多种运算符" 需要考虑哪一个运算符优先运行。

优先级从高到底:

❤1. () 优先级最高

2. 一元运算符 ++ -- !

3. 算数运算符 先* / % 后 + -

4. 关系(比较)运算符 > >= <

5. 相等(比较)运算符 == != === !==

6. 逻辑运算符 先&& 后||

❤7. 赋值运算符 = 优先级最低

14、 流程控制

控制流程(也称为流程控制)是计算机运算领域的用语,意指在"程序运行"时,个别的指令(或是陈述、子程序)运行或求值的"顺序"。

不论是在声明式编程语言或是函数编程语言中,都有类似的概念。

流程控制分为三种结构:顺序结构、分支结构、循环结构

14.1 顺序结构: 代码从上到下, 按顺序执行

14.2 分支结构: 代码有选择的执行, 选择某个分支的代码执行

14.2.1 分支结构又可以分为单分支,双分支以及多分支

条件表达式就是可以得到布尔值的式子

14.2.1.1 单分支:只有一种选择, if语句实现

语法:

if( 条件表达式 ){

条件表达式成立时,执行的代码块;

}

14.2.1.2 双分支,有两种选择, if...else语句实现

语法:

if( 条件表达式 ){

条件表达式成立时,执行的代码块;

}else{

条件表达式不成立时,执行的代码块;

}

14.2.1.3 多分支,有多种选择, if...else if...else语句, switch语句

语法:

if( 条件表达式1 ){

条件表达式1成立时,执行的代码块;

}else if( 条件表达式2 ){

条件表达式1不成立时,条件表达式2成立,执行的代码块;

}else if( 条件表达式3 ){

条件表达式1和2都不成立时,条件表达式3成立,执行的代码块;

}else if( 条件表达式4 ){

条件表达式1,2,3都不成立时,条件表达式4成立,执行的代码块;

}else{

以上条件表达式都不成立,执行的代码块

}

14.2.1.4 Switch语法实现多分支:

14.2.1.4.1 语法:

switch(变量名){

case 值1:

代码块1;

break; ​

case 值2:

代码块2;

break; ​

case 值3:

代码块3;

break;

​ case 值n:

代码块n;

break; ​

default:

如果给定default 子句,这条子句会在 表达式 的值与任一 case 语句都不匹配时执行

}

14.2.1.4.2 运算规则:

1. 拿到switch()里面的变量名的值跟 case后面值进行"全等全等全等"比较, 如果比较成功, 则执行对应的代码块, 执行完代码块以后, 检查是否存在break关键字; 如果有break关键字,则结束switch分支; 如果没有break关键字,会一直往下执行代码块,直到遇到break关键字为止

2. 变量值跟case所有的所有值比较的时候,都不成立, 如果存在default语句,就会执行default默认的代码块

14.2.1.4.3 扩展知识: 如果多个case 值的代码块是相同的情况下,可以把多个case值写在一起

switch(变量名){

case 值1:

case 值2:

case 值3:

满足case值1或者case值2或者case值3,都会执行的代码块;

break;

case 值4:

代码块4;

break;

case 值5:

代码块5;

break; ​

default:

如果给定default 子句,这条子句会在 表达式 的值与任一 case 语句都不匹配时执行

}
14.2.1.5 if多分支语句与switch之间的区别

1. switch语句它在功能上和if语句多分支很相似

2. 如果是"范围"的判断推荐使用if语句多分支

3. 如果是"固定值"之间的比较 推荐使用switch语句

4. 因为switch能够实现的功能 我们其实完全可以使用if语句多分支来实现!

14.3 循环结构: 满足一定条件的时候,代码重复执行

14.3.1 循环结构的循环四要素:

1. 初始化变量, 循环从什么值开始

2. 循环条件, 循环什么时候结束

3. 循环体, 重复执行的代码块就是循环体

4. 变量更新, 更新变量的值,如果不更新变量的值,那么循环会一直成立,就会造成死循环

14.3.2 实现循环结构的几种语句:

14.3.2.1 while循环:

语法:

初始化变量;

while( 循环条件 ){

循环体;

变量更新;

}

14.3.2.2 do...while循环 (了解):

语法:

初始化变量;

do{

循环体;

变量更新;

}while( 循环条件 );

14.3.2.3 while和do...while的区别:

while先判断再执行循环体, do...while先执行一次循环体,再判断 所以 do...while执行会执行一次循环体

14.3.2.4 for循环:

语法:

for(①初始化变量; ②循环条件; ④变量更新 ){

③循环体;

}

①②③④ => ②③④ => ②③④ ...

eg:九九乘法表

  var str = "";
  str += "<table border='1'>";
  for (var i = 1; i <= 9; i++) { // 外层循环控制行
       str += "<tr>";
       for (var j = 1; j <= i; j++) { // 内层循环控制列
         str += "<td>" + j + " &times; " + i + " = " + i*j + "</td>";
             }
         str += "</tr>";
        }
  str += "</table>";
  document.write(str);
14.3.3循环中断关键字:

// 典型的,当条件表达式不成立了,那么循环体就会终止执行。也可以称之为循环它寿终正寝了。

// 循环提前终止:本来条件表达式是成立了,循环体还可以继续的往下执行,但是我们可以使用一些关键字让其提前终止。

// break和continue 循环终止的关键字 都需要配合 if语句来实现 主要的作用是为了提升循环的效率!

// 注意: break和continue这个两个关键字,只能在"循环语句"中使用

14.3.3.1 break

// break打断的意思,当在循环体中遇到了break关键字以后,"立即跳出整个循环"

14.3.3.2 continue

// continue继续的意思,"立即跳出当前本次循环,继续下一次循环"

15、window.prompt() 用户输入对话框

// 这个方法是属性window对象的方法 所以window可以省略

// 这个方法是用来向浏览器中弹出一个用户输入对话框

15.1 语法:

// window.prompt(text,defaultText)

// 第一个参数:text表示提示信息

// 第二个参数:defautlText 表示输入框的中默认文本 默认值

15.2 注意:这两个参数都可以省略不写!

// 这个方法有两个按钮 :确定按钮、取消按钮

// 当用户点击"确定"按钮时会得到一个"String类型"的数据

// 当用户点击"取消"按钮会得到一个关键字 null

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨桃贝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值