# JS 入门

# 一、JS 的三种写法和输入输出

# 1. JS 的三种写法

  1. 行内式 js 直接写到元素的内部 (写到 body 标签里)
<input type="button" value="唐伯虎" onclick="alert('秋香姐')">
  1. 内嵌式的 js (写到 script 标签内)
alert('我是编程语言,来控制电脑网页弹出你好');
  1. 外部式的 js (写到 head 标签内)

外部 js 引入

<script src="a.js"></script>
alert('你好呀,我是高级程序语言 JavaScript')

# 2. JS 的输入输出

prompt('请输入您的年龄');           
// 输入框

alert('计算的结果是');             
// alert 弹出输出的警示框  展示给用户的

console.log('我是程序员能看到的');  
// console 控制台输出 给程序员测试用的

# 二、JS 变量

1.变量:用于存放数据的容器或盒子,我们通过变量名获取数据,甚至数据可以修改。

var age;              // 1. 声明了一个 age 的变量
age = 18;             // 2. 赋值  把值存入这个变量中
console.log(age);     // 3. 输出结果   
var myname = 'andy';  // 4. 变量的初始化
console.log(myname);      

2.更新变量

var myname = 'andy';
console.log(myname);
myname = 'dlaraba'
console.log(myname);

3.声明多个变量

var age = 18;
var address = '北京';
var gz = '28000'; 
var age = 18,
    address = '北京',
    gz = '28000';

4.声明变量的特殊情况

⑴ 只声明不赋值 结果是?
程序也不知道里面存的是啥,所以结果是 undefined 未定义的。

var sex;
console.log(sex);         // undefined

⑵ 不声明 也不赋值 直接使用某个变量会报错的

console.log(tel);         // 报错

⑶ 不声明 直接赋值使用

qq = 110;
console.log(qq);         // 输出结果

5.变换两个变量的值:

⑴ 我们需要一个临时变量帮助我们
⑵ 把 apple1 给我们的临时变量 temp
⑶ 把 apple2 给我们的 apple1
⑷ 把临时变量里面的值给 apple2

var temp;                   
// 声明了一个临时变量为空

var apple1 = '青苹果';
var apple2 = '红苹果';
temp = apple1;              
// 把右边给左边

apple1 = apple2;
apple2 = temp;
console.log(apple1);
console.log(apple2);

# 三、基本数据类型

# 1. 数字型 Number

(1)八进制 0 ~ 7 数字前面加 0 表示八进制

var num1 = 010;
console.log(num1);              
// 0... 八进制

(2)十六进制 0 ~ 9 a ~ f 数字前面加 0x 表示十六进制

var num3 = 0x9;
console.log(num3);              
// 0x... 十六进制

(3)数字型的最大值

console.log(Number.MAX_VALUE);     
// 最大值

(4)数字型的最小值

console.log(Number.MIN_VALUE);    
// 最小值

(5)无穷大

console.log(Number.MAX_VALUE * 2);  
// Infinity 无穷大

(6)无穷小

console.log(-Number.MAX_VALUE * 2);  
// -Infinity 无穷小

(7)非数字

console.log('andy' - 100);     
// NaN

(8)isNaN( )

这个方法用来判断非数字 并且返回一个值。

如果是数字返回的是 false,如果不是数字返回的是 true。

console.log(isNaN(13));        
// false
console.log(isNaN('andy'));    
// true

# 2. 字符串型 String

(1)只要是加了引号 ' ' 或 " " 的都属于字符串型

var str = '我是一个"白富美"的程序媛'
console.log(str);

字符串转义字符:
都用 \ 开头 但是 \ 要写到引号里面

字符 描述
n 换行符,n 是 newline 的意思
\ 斜杠 \
' 单引号 ' '
" 双引号 " "
t tab 缩进
b 空格,b 是 blank 的意思

(2)检测获取字符串的长度 length

var str = 'my name is andy';
    console.log(str.length);  // 17

(3)字符串的拼接 + (+号口诀:数值相加,字符相连)

console.log(12 + 12);          // 24
console.log('12' + 12);        // '1212'
console.log(0.1 + 0.2);        
// 0.30000000000000004    
// 计算机在存储数据的时候把十进制转换为二进制存储的,
// 在这个过程中会有一些误差,0.1 + 0.2 != 0.3 就是误差导致

(4)字符串的拼接加强

var age = 20;
console.log('andy' + age + '岁了');    
// andy 20 岁了

# 3. 布尔型 Boolean

var flag = true;                
// flag 布尔型
var flag1 = false;              
// flag1 布尔型
console.log(flag + 1);      
// true 参与加法运算当 1 来看。 输出结果是 2
console.log(flag1 + 1);     
// false 参与加法运算当 0 来看。 输出结果是 1

# 4. undefined

如果一个变量只声明未赋值 就是 undefined 未定义的数据类型

var str;
console.log(str);            
// undefined
var variable = undefined;
console.log(variable + 'andy');     
// undefinedandy
console.log(variable + 1);          
// NaN    undefined和数字相加 最后结果是 NaN

# 5. null 空值

var space = null;
    console.log(space + 'andy');      // nullandy
    console.log(space + 1);           // 1

# 四、typeof 和 数据类型的相互转换

# 1、获取变量数据类型 typeof

var num = 10;
console.log(typeof num);            
// number

prompt 取过来的值是 字符串型的

var age = prompt('请输入您的年龄:');
console.log(age);                   
//  等于输入的年龄
console.log(typeof age);            
// string

# 2、基本数据类型的相互转换

# 1. 转换为字符串型

(1)把数字型转换为字符串型,变量 .toString( )

var num = 10;
var str = num.toString();
console.log(str);
console.log(typeof str);

(2)我们利用 String(变量)

console.log(String(num));

(3)利用 + 拼接字符串的方法实现转换效果 隐式转换

console.log(num + '');

# 2. 转换为数字型

(1)parseInt(变量) 可以把 字符串型的转换为数字型 得到的是整数

console.log(parseInt('3.14'));       // 3 取整

(2)parseFloat(变量) 可以把 字符型的转换为数字型 得到的是小数 浮点数

console.log(parseFloat('3.14'));      // 3.14

(3)利用 Number(变量)

var str = '123';
console.log(Number(str));
console.log(Number('12'));

(4)利用了算数运算 + - * / 隐式转换

console.log('12' - 0);            // 12
console.log('123' - '120');       // 3
console.log('123' * 1);           // 123

# 3. 转换为布尔型

代表空、否定的值会被转换为false,如' '、0、NaN、null、undefined
其余值都会被转换为 true

// false
console.log(Boolean(''));            // false
console.log(Boolean(0));             // false
console.log(Boolean(NaN));           // false
console.log(Boolean(null));          // false
console.log(Boolean(undefined));     // false


// true
console.log(Boolean('123'));         // true
console.log(Boolean('你好吗'));       // true
console.log(Boolean('Hello'));       // true

# 五、运算符

# 1. 算术运算符: +、-、*、/、%

console.log(1 / 1);              // 1

(1)% 取余 (取模)

console.log(5 % 3);              // 2

(2)浮点数 算数运算里面还有问题

console.log(0.07 * 100);        // 7.000000000000001

(3)我们不能直接拿着浮点数来进行相比较 是否相等

var num = 0.1 + 0.2;
console.log(num == 0.3);     // false

# 2. 前置递增运算符:++a

(1)想要一个变量自己加1 , num = num + 1 比较麻烦

++num;

(2)前置递增运算符 ++ 写在变量的前面

var age = 10;
++age;                  // 类似于 age = age + 1;
console.log(age);       // 11

(3)先加1 后返回值

var p = 10;
console.log(++p + 10);   // 21

# 3. 后置递增运算符:a++

(1)前置递增和后置递增如果单独使用效果是一样的
(2)后置递增看 口诀:先返回原值 后自加1

var age = 10;
console.log(age++ + 10);          // 20
console.log(age);                 // 11

# 4. 比较运算符: >、<、>=、<=、==、!=、===(全等)、!==(全不等)

(1)程序里面的等于符号是 == 默认转换数据类型 会把字符串型的转换为数字型 只要求值相等就可以

console.log(3 == 5);      // false
console.log(18 == '18');  // true

(2)程序里面有全等(一模一样), 要求两侧的值 还有 数据类型完全一致才可以 true

console.log(18 === 18);    // true
console.log(18 === '18');  // false

# 5. 逻辑运算符: &&(与)、||(或)、!(非)

(1)逻辑运算

① 逻辑与 && and:两侧都为 true, 只要有一侧为 false 结果就是 false

console.log(3 > 5 && 3 > 2);    // false
console.log(3 < 5 && 3 > 2);    // true

② 逻辑或 | | or:两侧都为 false 结果才是 false, 只要有一侧true 结果就是true

console.log(3 > 5 || 3 > 2);   // true
console.log(3 > 5 || 3 < 2);   // false

③ 逻辑非 ! not

console.log(!true);           // false
console.log(!false);          // true

(2)短路运算(逻辑中断逻辑与):

① 如果表达式1 结果为真 则返回表达式2

console.log(123 && 456);       // 456

② 如果表达式1 结果为假 则返回表达式1

console.log(0 && 456);                // 0
console.log(0 && 1 + 2 && 456);       
// 0
// 如果有空的或者否定的为假 
//【 0 '' null undefined NaN 】, 其余是真的 

(3)短路运算(逻辑中断逻辑或): ① 如果表达式1 结果为真 则返回表达式1

console.log(123 || 456);                 // 123
console.log(123 || 456 || 456 + 123);    // 123

② 如果表达式1 结果为假 则返回表达式2

console.log(0 || 456|| 456 + 123);        
// 456
// 逻辑中断很重要 它会影响程序运行的结果
var num = 0;
console.log(123 || num++);          
// 输出的是123, num++根本就没有运行
console.log(num);                   
// 所以结果是num=0;

# 6. 赋值运算符: = 、 -= 、 += 、 *= 、 /= 、 %=

var age = 2;
age *= 3;
console.log(age);     // 2 * 3 = 6

# 7.运算符的优先级

优先级 符号 描述
1 ( ) 小括号
2 ++ -- ! 一元运算符
3 先 * / %,再 + - 算数运算符
4 >、>=、<、<= 关系运算符
5 ==、!=、===、!== 相等运算符
6 先 &&(与)、再 (或) 逻辑运算符
7 = 赋值运算符
8 , 逗号运算符

# 六、if 和 switch 循环语句

# 1. if 语句:

(1)if 分支语句:

① if 的语法结构 if(如果的意思)

if (条件表达式) {
    执行语句
}

② 执行思路:如果 if 里面的条件表达式结果为真 true,则执行大括号里面的 执行语句。
如果 if 里面的条件表达式结果为假 false,则不执行大括号里面的语句 ,执行if 语句后面的代码。

③ 代码体验

if (3 < 5) {
    alert('沙漠骆驼');
}

# 2. if else if 双分支语句:

① 语法结构 if(如果) else(否则)

if (条件表达式) {
        执行语句1
    } else {
        执行语句2
}

② 执行思路 如果表达式结果为真 那么执行语句1 否则 执行语句2

③ 代码验证

var age = prompt('请输入您的年龄:');
if (age >= 18) {
    alert('我想带你去网吧偷耳机');
} else {
    alert('回家做作业去');
}

④ if里面的语句1 和 lese 里面的语句2 最终只能有一个语句执行 2选1

⑤ else 后面直接跟花括号

# 3. if else if 多分支语句:

① if else if 多分支语句 多选一

② 语法规范

③ 必须用从大到小的顺序来写

var score = prompt('请输入您的成绩:');
if ( score >= 90 ) {
    alert('您的成绩是A');
} else if (score >=80) {
    alert('您的成绩是B');
} else if (score >=70) {
    alert('您的成绩是C');
} else if (score >=60) {
    alert('您的成绩是D');
} else  {
    alert('您的成绩是E');
}

# 4. 三元表达式

  1. 由三元运算符组成的式子称为 三元表达式 (可以理解为简化版的多分支语句 if else if)

  2. 一元表达式: ++num 二元表达式:3+5 三元表达式: ? :

  3. 语法结构

条件表达式 ? 表达式1 : 表达式2
  1. 执行思路
    // 如果条件表达式结果为真,则返回表达式1的值; 
    // 如果条件表达式结果为假,则返回表达式2的值。
  1. 代码体验
var num = 10;
var result = num > 5 ? '是的' : '不是的';
    console.log(result);                     // 

# 5. switch 语句

  1. switch语句也是多分支语句 也可以实现多选一

  2. 语法结构 switch(转换、开关的意思) case(小例子或者选项的意思)

  3. 执行思路: 利用表达式的值和case后面的选项值相匹配,如果匹配上,就执行该case里面的语句;
    如果都没有匹配上,则执行default里面的语句。

switch (2) {
    case 1:
        console.log('这是1');              // 
        break;
    case 2:
        console.log('这是2');              // 
        break;
    case 3:
        console.log('这是3');              // 
        break;
    default:
        console.log('没有匹配结果');        // 
}
  1. 注意事项:
//   1. 开发里面 表达式通常写成变量
//   2. num和 case里面的值相匹配的时候 全等 必须是值和数据类型一致才可以 num === 1;
//   3. break 如果当前的case 里面没有break 则不会退出switch 是继续执行下一个case

# 七、for 和 while 循环语句

# 1、for 循环语句

# 1. for 循环语句

① for重复执行某些代码,通常跟技术有关系

② for语法结构

for (初始化变量; 条件表达式; 操作表达式) {
    循环体
}
for (var i = 1; i <= 10; i++) {
    console.log(i);                 // 
}

③ 初始化变量:用var生命的普通变量,通常用于作为计数器使用

④ 条件表达式:用来决定每一次循环是否继续执行 就是终止的条件

⑤ 操作表达式:每次循环最后执行的代码 通常用于计数器变量进行更新(递增或递减)

# 2. 双重 for 循环:

双重for循环 语法结构

for (外层的初始化变量; 外层的条件表达式; 外层的操作表达式){
    for (里层的初始化变量; 里层的条件表达式; 里层的操作表达式){
        执行语句
    }
}
for (var i = 1; i <= 3; i++) {
    console.log('这是外层循环第' + i + '次');          // 
    for (var j = 1; j <= 3; j++) {
        console.log('这是里层循环的第' + j + '次');    // 
    }
}

# 2、while 循环语句

# 1. while 语句

① while 循环语句结构 while(当...的时候)

while (条件表达式) {
    循环体
}

② 执行思路:当条件表达式结果为true 则执行循环体,否则退出循环

var num = 1;
while (num <= 100) {
    console.log('hello');           // 
    num++;
}

# 2. do while 循环语句

① do while 循环 语法结构

do {
    循环体
} while (条件表达式)

② 执行思路:跟while不同在于do while 先执行一次循环体 再判断条件 如果表达式结果为真,则继续执行循环体,否则退出循环

③ 代码验证:

var i = 1;
do {
    console.log('how are you?');            // 
    i++;
} while (i <= 100)

④ do while 循环体至少执行一次

# 八、continue 和 break 关键字

# 1、continue 关键字

用于立即跳出本次循环,继续下一次循环(本次循环体中 continue 之后的代码就会少执行一次)

for (var i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;  // 只要遇见continue就退出本次循环 直接跳到 i++
    }
    console.log('我正在吃第' + i + '个包子');      // 
}

# 2、break 关键字

直接退出整个 for 循环

// 一共买了5个包子,吃到第三个发现里面有虫子,后面的就不想吃了
for (var i = 1; i <= 5; i++) {
    if (i == 3) {
        break;
    }
    console.log('我正在吃第' + i + '个包子');        // 
}

# 九、数组、遍历数组

# 1. 数组(Array)

数组:就是一组数据的集合 存储在单个变量下的优雅方式。

(1)数组的创建方式:
① 利用 new 创建数组
② 利用数组字面量创建数组(常用)

① 利用 new 创建数组

var arr = new Array();              // 创建了一个空的数组

② 利用数组字面量创建数组(常用)

var arr = [];                      // 创建了一个空的数组
var arr1 = [1, 2, 'andy', true];   // 给值称为数组的初始化

(2)[ ] 中括号里面的称为数组元素

(3)获取数组元素 格式: 数组名[索引号] 索引号从0开始

console.log(arr1);
console.log(arr1[2]);     // andy 
console.log(arr1[3]);     // true

# 2. 遍历数组

遍历数组:就是把数组的元素从头到尾访问一次。

var arr = ['red', 'green', 'blue'];
    for (var i = 0; i < arr.length; i++) {
        onsole.log(arr[i]);
    }
//  1. 索引号从0开始,所以i必须从0开始  
//  2. 输出的时候 arr[i] i 计数器当索引号来用
//  3. 数组长度:   数组名.length

# 十、数组相关的的方法

# 1. 数组新增元素

(1)新增数组元素 修改length长度

var arr = ['red','green','blue'];
console.log(arr.length);
arr.length = 5;
console.log(arr);      // ['red', 'green', 'blue', 空属性 ×2]  只有三个元素 剩下的两个就会是 undefined
console.log(arr[3]);   // undefined
console.log(arr[4]);   // undefined

(2)新增数组元素 修改索引号 追加数组元素

var arr1 = ['red','green','blue'];
arr1[3] = 'pink';    
console.log(arr1);    // ['red', 'green', 'blue', 'pink']
arr1[0] = 'yellow';   // 这里是替换数组元素
console.log(arr1);    // ['yellow', 'green', 'blue', 'pink']
// 不要直接给数组名赋值 否则里面的数组元素都没有了

# 2. 筛选数组的方法

将数组 [ 2, 0, 6, 1, 77, 0, 52, 25, 7 ] 中大于等于10的元素选出来,放入新数组

(1)方法1 借助一个临时变量 j,存放新数组的长度 借助一个临时变量 j,存放新数组的长度

var arr = [2,0,6,1,77,0,52,25,7];
var newArr = [];
var j = 0;
for (var i = 0; i < arr.length; i++) {
    if (arr[i] >= 10) {
        newArr[j] = arr[i];
        j++;
    }
}
console.log(newArr);                  // [77, 52, 25]

(2)方法2 (常用) 直接使用新数组的长度 newArr[newArr.length]

var arr = [2,0,6,1,77,0,52,25,7];
var newArr = [];
for (var i = 0; i < arr.length;i++) {
    if (arr[i] >= 10) {                  // 如果去掉 0,其他的放入新数组的话 if 语句是:  arr[i] != 0
        newArr[newArr.length] = arr[i];
               
    }
}
console.log(newArr);                     // [77, 52, 25]

# 3. 反转数组

var arr = ['red','green','blue','pink','yellow'];
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {    // arr.length - 1 = 4
    newArr[newArr.length] = arr[i]
}
console.log(newArr);                         //  ['yellow', 'pink', 'blue', 'green', 'red']