JS是什么?
JS是一种运行在客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能
浏览器就是一种运行JS脚本语言的客户端,JS的解释器被称为JS引擎,为浏览器的一部分
JS的组成?
JavaScript 是由 ECMAScript,DOM 和 BOM 三者组成的。
ES
DOM
BOM
JS的书写方式?
行内式(不推荐)
<input type="button" value="按钮" onclick="alert('hello world')" />
内嵌式
<body>
<script>
alert('hello world')
</script>
</body>
外链式(后期工作中使用)
<script src="main.js"></script>
JS定义变量
变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据
变量其实就相当于一个容器,内部可以存储任意类型的数据,使用变量时,用的是内部存储的数据。
为什么要定义变量?
使用变量可以方便的获取或者修改内存中的数据
如何定义变量
使用一个 var 的关键字进行定义,后面必须加一个空格,空格后面自定义变量名
var a;
var b;
var c;
变量赋值
变量定义之后,初始时没有进行赋值,内部有一个默认存储的值叫 undefined(未定义) 表示内部未赋值,但可以存储数据了
变量赋值的方式:通过等号 = 赋值,等号右边的值赋值给左边的变量 ==(等号在 JS 中叫做 赋值号;书写时,等号 = 两侧习惯书写一个空格)==
// 变量定义
var a
// 变量赋值
a = 1
// 变量定义并赋值
var b = 2
定义变量赋值简写语法 : ver / let / const (变量名) = (值) = (赋值号) /
打印: console.log(要打印的值的变量); var a = 100 console.log(a)
使用变量
直接写变量名即可使用变量;变量在使用前,必须先有定义,如果没有定义,会出现引用错误
变量命名规则(必须遵守,不遵守会报错)
由字母、数字、下划线、$符号组成,不能以数字开头
字母区分大小写
不能是关键字和保留字
关键字指的是js中有特殊功能的小词语,比如var、for等
保留字指的是现在没有特殊功能,但是将来新语法中有可能作为关键字使用
js 数据类型
JS中的值,无论是字面量还是变量,都有明确的类型`
数据类型分类(以基本数据类型为主)
Number 数字类型
不区分整数、浮点数、特殊值,都是 Number 类型
String 字符串类型
所有的字符串都是 String 类型
undefined undefined类型
ndefined本身就是一个数据,表示未定义,变量只声明不赋值的时候,值默认是 undefined
Boolean 布尔类型
Boolean 字面量:只有 true 和 false 两个字面量的值,必须是小写字母
计算机内部存储:true 为 1,false 为 0
null类型
null 本身就是一个数据
从逻辑角度,null 值表示一个空对象指针
如果定义的变量准备在将来用于保存对象,最好该变量初始化为 null
基本数据类型有哪些
数据类型
string类型
undefined类型
Booleam布尔值类型(判断)
Null空值
数据类型检测
语法:console.log(typeof(要检测的值的变量));
Null的值是Object; 代表空,空对象。 typeof不能正确检测Null的值; 所以typeof不能正确检测全部数据类型
如何检测Null的类型? 'js 百度要查找的问题'
类型转换
1、语法:console.log ( Number ( 数据 ) );
如果转换的字符串是纯数字 直接转换为数字,
如果是空字符串 转换为 0 ,
其他类型字符串 无法通过常规数字表示的转化为NaN;
布尔值:
转Number类型 -- true = 1 / false = 0 ;
unsefined:
直接转化为 NaN ;
Null:
直接转化为 0
<!-- 数值为 纯数字或以数字开头的 可以转化 / 否则其他转化为NaN -->
2、数字取整:转化为数字类型 ,值为整数,
parseInt('100.232154') == 100 ;
空字符串 = NaN; / undefined = NaN / Null = NaN
3、转化为浮点数:
parseFolat(' ') :
4、扩展 :
数据 - 0 = Number '100.99' - 0 = 100.99
各种类型转换
1.转换字符串类型
<!
变量.toString() ;
(true) = true / (false) = false
(undefined) = 报错 / (Null) = 报错
String(变量) - 什么类型的变量都可以转化
变量+'' ;
2.转布尔值
Booleam(变量)
只有数字0 转化为 false / 其他为true
字符串 '' 空转为 false / ' ' 空格转为true
undefined - null 转为 false / 其他字符串转为true
3.运算符
<!
算数运算符 + - * / %
数字+数字=和 / 如果一边不是数字
拼接操作只出现在加法+中
其他运算符出现非数字类型 - 先转换为数字类型(隐式转换)在运算
赋值
= += -= *= /= %=
变量 = 变量 + (数字) 等同 变量 += (数字)
比较运算符 >
/ < / == / === 打印的返回值布尔类型
1 > 1 = false / 1 >= 1 = true
<!
== 只对比值是否相等 , 不对比数据类型。
=== 对比值和数据类型是否全等 。
判断不等 != / !==
1 ! = '1' = false / 不判断数据类型
1 !== '1' = true / 判断数据类型
4. 逻辑运算 数字转变布尔
&& (逻辑并) || (逻辑或) !(逻辑非,取反)
> 如果左边为真 && 返回右边的值 / 左边的0 或者false && 返回左边的值
> 如果左边为真 || 返回左边的 / 左边的0 或者false || 返回右边
5. 自增自减运算 ++ /
> ++a ; 先将 a 自身的值 +1 , a = 2 .
> a++ ; a先参与运算 ,打印结果为初始值 1 然后a的值 +1 .
>
6. if分支语句
> 语法: if( 条件 ) { 满足条件的代码执行 , 不满足永不执行}
if ( 条件1 ){ 满足条件1 执行的} if (条件2 ) { 满足条件2 执行的}
if ( 条件1 ){ 满足条件1 执行的 }else{ 不满足条件1 执行的 }
if( 条件1 ){ 满足条件1 执行的}else if( 满足条件2 ){ 不满足条件1 满足条件2 执行的}else{ 都不满足之前条件执行的}
> 运算符优先级 - 同等级从左往右运算
一元运算符:先++ , 在
算数运算符:* / % + -
比较远算符:> >= < <=
比较运算符:== != === !==
逻辑运算符:先&& 后 ||
赋值运算符
有括号先算括号里
switch 分支语句
语法 switch( 要判断的变量){ case 1 :要执行的代码1 case 2 : 要执行的代码2 break; default: 以上都不满足就执行 }
> 执行权等 === / a = number / l类型不同 不会执行
```js
var a = 210;
switch (a) {
case 1:
console.log('如果我等于10就执行')
break;
case 20:
console.log('如果等于20就执行')
break;
case 120:
console.log('如果等于120就执行')
break;
default:
console.log('以上都不满足就执行')
}
```
switck 穿透语法
不写 break打断 会穿透
找到第一个满足的case会执行 ; 接着执行下一个操作,知道遇到break或者全部执行完毕。
也就是 只要遇到 break 就会停止执行。
三元表达式 ? :
语法: 条件? 条件正确执行的 : 条件为错误执行的代码
```js
var a = 2
var a1 = a === 1 ? '男': '女'
console.log(a1)
```
while循环语句
执行 重复 执行的代码
语法: while (条件){ 满足条件执行的代码}
> 1.初始化变量.
>2.判断条件.
>3.要执行的操作程序
>4.自身的改变 变量++
```js
var a = 100 ;
while(a < 1000 ){
console.log(1);
a++;
// console.log(a);
}
```
弹出输入框 :
prompt('请输入数据');
转化为数字形式 :
Number() / parseFloat - parseInt () / () - 0
do ... while 循环
> 第一次循环的时候不会判断条件,
> 语法: do{ 执行的代码程序 } while(条件)
for 循环
语法: for(1.定义初始化 2. 条件 3. 改变自身 ){
执行的代码程序
}
var b = 0 ;
for( var a = 1 ; a <= 100 ; a ++){
b += a ;
}
console.log(b);
流程控制
break (终止循环)
> 终止break 之后的程序
for (var i = 1 ; i <= 5 ; i ++ ){
console.log('字符串')
if( i === 3 ){
break
}
}
continue
> 跳出当前这一轮 , 直接下一轮循环
for (var i = 1 ; i <= 5 ; i ++ ){
if( i === 3 ){
console.log( ' 字符串')
continue
}
console.log('执行的')
}
循环嵌套
for ( var a = 0
for( var j = 0
console.log(j)
}
console.log(a+'的值')
}
document.write('向页面展示') > conlose.log('后台展示')
函数:
首先要声明定义 ,封装 在页面程序中多次出现较为复杂的代码段
> 函数的定义
声明式语法: function fn (形参1,形参2 ...){ 调用时要执行的代码段 } / 可以在定义前后调用 赋值式: var a = unction fn (形参1,形参2 ...){ 调用时要执行的代码段 } / 只可以在定义后调用
> 调用 - 可以多次调用
函数名() / 变量名()
fn() / a()
<!-- 面试 -->
赋值变量: 先声明一个变量,在给替他赋值
不能提前调用的原因
> 如果在定义变量之前 使用变量,那变量的值为undefined - 称为变量提升
function fn ( 形参1 ,形参2 .... 形参靠实参传递){ }
> 形参大于实参 , 一一对应,多出来的形参是 undefined
fn( 实参1 ,实参2...)
> 实参大于形参 , 一一对应形参,多出来的实参无形参接收,不执行操作
函数返回值
return
> 会终止return之后的操作
function fn() {
console.log(1)
console.log(2)
return 666
console.log(3)
console.log(4)
console.log(5)
}