第一周

121 阅读7分钟

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中有特殊功能的小词语,比如varfor等
    保留字指的是现在没有特殊功能,但是将来新语法中有可能作为关键字使用

js 数据类型

JS中的值,无论是字面量还是变量,都有明确的类型`
数据类型分类(以基本数据类型为主)

Number 数字类型

不区分整数、浮点数、特殊值,都是 Number 类型

String 字符串类型

所有的字符串都是 String 类型

undefined undefined类型

ndefined本身就是一个数据,表示未定义,变量只声明不赋值的时候,值默认是 undefined

Boolean 布尔类型

Boolean 字面量:只有 truefalse 两个字面量的值,必须是小写字母
计算机内部存储:true1false0

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 = 0unsefined: 
直接转化为 NaNNull: 
直接转化为 0 
<!-- 数值为 纯数字或以数字开头的 可以转化 / 否则其他转化为NaN --> 
2、数字取整:转化为数字类型 ,值为整数,
parseInt('100.232154') == 100 ;
空字符串 = NaN; / undefined = NaN / Null = NaN 
3、转化为浮点数: 
parseFolat(' ') : 
4、扩展 : 
数据 - 0 = Number '100.99' - 0 = 100.99

各种类型转换

1.转换字符串类型 
<!-- console.log() --> 
变量.toString() ;
(true) = true / (false) = false
(undefined) = 报错 / (Null) = 报错 -- 不能使用tostring Js不允许 
String(变量) - 什么类型的变量都可以转化
变量+'' ; -- 都可以转化 
2.转布尔值 
Booleam(变量)-- true / false 
只有数字0 转化为 false / 其他为true -- 非0即为真 
字符串 '' 空转为 false / ' ' 空格转为true 
undefined - null 转为 false / 其他字符串转为true 
3.运算符 
<!-- console.log( 数字 + 数字) -->
算数运算符 + - * / %
数字+数字=/ 如果一边不是数字 -- 那就执行拼接操作 
拼接操作只出现在加法+中 
其他运算符出现非数字类型 - 先转换为数字类型(隐式转换)在运算
赋值 
= += -= *= /= %=
变量 = 变量 + (数字) 等同 变量 += (数字)
比较运算符 >
/ < / == / === 打印的返回值布尔类型 
1 > 1 = false / 1 >= 1 = true 
<!-- 面试 -->
== 只对比值是否相等 , 不对比数据类型。 
=== 对比值和数据类型是否全等 。
判断不等 != /== 
1 ! = '1' = false / 不判断数据类型
1 !== '1' = true / 判断数据类型
4. 逻辑运算 数字转变布尔 -- 非0即为真
&& (逻辑并) || (逻辑或) !(逻辑非,取反) 
> 如果左边为真 && 返回右边的值 / 左边的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{ 都不满足之前条件执行的} 
> 运算符优先级 - 同等级从左往右运算
一元运算符:先++ , 在 -- ,在 !(true / false) 
算数运算符:* / % + -
比较远算符:> >= < <=  
比较运算符:== != === !== 
逻辑运算符:先&&|| 
赋值运算符 
有括号先算括号里

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 ; a <= 3 ; a++){
    for( var j = 0 ; j < 3 ; j++){ 
        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)
}