一、JS的基础知识及变量
## JS的组成
1.ECMAScript // JS语法
2.DOM //页面文档对象模型
3.BOM //浏览器对象模型
## JS的书写位置
1.行内式
**特殊情况下使用** 以on开头的属性
2.内嵌式
较为常用
3.外部式
外部导入js文件
```<script src="文件名称"> </script> ```
## JS的注释
// 1.单行注释
2.多行注释 与C++一致
## JS的输入输出语句
alert(msg) 浏览器弹出警示框 浏览器
console.log(msg) 浏览器控制台打印输出信息 浏览器
prompt(info) 浏览器弹出输入框,用户可以输入 浏览器
```
输入框
prompt('文本内容');
alert 弹出警示框
alert ('内容');
console.log('内容') 程序员看的
```
## 变量
1.初始化变量
var age=10; //声明一个名称为age的变量,并赋值
2.案例
```
var myname;
myname=prompt('输入姓名');
alert(myname);
```
3.变量语法扩展
1.一个变量被更新,原有值被覆盖,以最后一次赋值为准
2.同时声明多个变量
```
var 变量1,变量2....
```
4.声明变量的特殊情况
只声明未赋值的变量 输出undefined
变量不声明直接使用是可以的,不推荐使用
```qq=100 ; console.log(qq);```
不要使用name作为变量名
二、数据类型
## 变量的数据类型
**JS的变量数据类型是只有程序在运行过程中,通过等号右边的值来确定的
JS拥有动态类型,相同的变量可以用作不同的类型**
```
var x=10;
x='变量';
```
JS中的数据类型分为两种类型:简单数据类型和复杂数据类型
简单数据类型:
Number String Boolean Undefined Null
复杂数据类型:
Object
## 简单数据类型
### 数字型(Number)
1.八进制 我们程序里面数字前面加上0 表示八进制
2.十六进制 我们程序里面数字前面加上0x 表示十六进制
3.数字型的最大与最小值
```
console.log(Number.MAX_VALUE)
console.log(Number.MIN_VALUE)
```
4.特殊值
Infinity 无穷大
-Indinity 无穷小
NaN 代表一个非数值
isNaN() 用来判断非数字 并且返回一个值 如果是数字返回的是false 否则返回true
```
console.log(isNaN(10))
```
### 字符串型
1.字符嵌套:外单内双
```
var str='我是"普通人".'
console.log(str.length);
```
2.检测字符串的长度 length属性 示例如上
3.字符串的拼接
字符串+任何类型(先给它转换成字符串型,再进行拼接)=拼接之后的新字符串
**数值相加,字符相连**
### 布尔型 undefined NULL
两个值: true(1) false(0)
undefined与数字相加 最后结果是NaN
NULL与字符相加 为‘NULL字符’
NULL+1 结果为1
### 获取变量数据类型
使用 typeof 变量名
```
var age=prompt ('请输入您的年龄');
console.log(typeof age); //输出为string
```
### 数据类型转换
1.转换为字符串型
```
//数字型转换 toString()
var num=10;
var str=num.toString();
console.log(typeof str);
//利用String()
console.log(String(num));
// 加号拼接字符串(隐式转换)
console.log(num+'');
```
2.转换成数字型
```
var age=prompt('请输入数字')
// 1.parseInt(string)函数
console.log(parseInt(age)) //转换成整型
console.log(parseInt('120px')) //输出为120 过滤了px
// 2.parseFloat(变量) //字符转换成数字 可以得到小数
console.log(paresFloat('3.156'));
// 3. 利用Number()函数强制转换
console.log(Number(age));
// 4.隐式转换 利用 - * /
console.log('123'-0);
console,log('123'*1);
```
3.转换成布尔型
利用Boolean()函数
三、运算符与流程控制分支结构
### 算术运算符
浮点数直接参与运算容易出现问题,不要直接判断两个浮点数是否相等
### 递增、递减运算符
前置递增 ++num;先自增后返回值
后置递增:num++;先返回值后自增
递减同上
### 比较运算符
1.=== !==
```
console.log(18==='18') //false
console.log(18===18) //true
```
全等 要求值和数据类型都一致
2.两个等于号会默认转换数据类型
把字符串型的数据转换成数字型,再进行比较
```
console.log(18=='18') // true
```
### 逻辑运算符
返回值是布尔值 与C++一致
&& 逻辑与
|| 逻辑或
! 逻辑非
逻辑与短路:
如果表达式1为真,返回表达式2,如果表达式1为假,返回表达式1.
逻辑或短路:
如果表达式1为真,返回表达式1,如果表达式1为假,返回表达式2.
### 赋值运算符
= += -= /= %= * =
### 优先级
1.小括号
2.一元运算符 ++ -- !
3.算术运算符 先*/%后+-
4.关系运算符
5.相等运算符
6.逻辑运算符 先&& 后||
7.赋值运算符
8.逗号运算符
## 流程控制分支结构
分支流程控制
1.if-elseif语句
语法结构
```
if (条件表达式){
//执行语句1
}
else if(条件表达式){
//执行语句2
}
else if(条件表达式){
//执行语句3
}
'''
else{
}
```
2.三元表达式
语法结构:
```
var answer=条件表达式?表达式1:表达式2
```
3.switch语句
语法结构
```
switch (表达式){
case value1:
执行语句;
break;
case value2:
执行语句;
break;
case value3:
执行语句;
break;
'''
default:
执行最后的语句;
}
```
注意事项:
表达式中的值与value匹配时必须全等 值与数据类型一致
四、数组
一组数据的集合
## 创建数组
1.利用 new创建数组
```
var arr=new Array();
```
2.利用数组字面量创建数组
```
var 数组名=[];
```
数组里面的数据用逗号隔开
数组中可以存放任何数据类型的数据元素
## 获取数组中的元素
格式:数组名【索引号】
```
var arr=[1,666,'66'];
console.log(arr[2]);
```
数组的长度
通过使用 数组名.length (动态检测)访问数组元素的数量
```
var arr=[1,2,6,3]
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
```
### 数组新增元素
1.通过修改length长度来实现数组扩容
2.通过修改索引号 追加数组元素
```
var arr=[1,2,2,3];
arr[4]=5;
alert(arr);
```
不要直接给数组名赋值,会导致数组中元素消失
## 冒泡排序
算法步骤:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
```
var arr = [2, 0, 6, 1, 77, 0, 52, 25, 7, 0];
var temp = 0;
var j = 0;
for (var i = 0; i < arr.length-1; i++) {
for (j = 0; j < arr.length-1-i; j++) {
if (arr[j] >= arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
alert(arr);
```
五、函数
函数的使用
1.声明函数
```
function 函数名(){
// 函数体
}
```
2.调用函数
格式:
函数名 ();
3.注意点
多个参数用逗号隔开
形参看成不用声明的变量
实参的个数小于形参的个数 输出NaN
4.函数的返回值
return 语句
```
function 函数名(){
//return 需要返回的结果;
}
```
return 会终止函数
return 只能返回一个值(最后一个值)
想要返回多个值,把多个值放在一个数组中再返回
函数没有return返回undefined
5.案例
```
function findMax(num1) {
var b = 0;
for (var i = 0; i < num1.length; i++) {
if (b <= num1[i]) {
var temp = num1[i];
num1[i] = b;
b = temp;
}
}
return b;
}
var a = [5, 2, 99, 101, 67, 77];
console.log(findMax(a));
```
## arguments的使用
arguments 实际上它是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储了***传递的所有实参***。
```
function fn(){
console.log(arguments);
}
fn(1,2,3);
```
arguments 展示形式是一个伪数组
伪数组的特点
1.具有length属性
2.按索引的方式存储数据
3.不具有数组的push,pop
函数的两种声明方式
1.利用函数关键字自定义函数
2.函数表达式 (匿名函数)
```
var 变量名 =function (){};
var fun= function (){
alert('66666')
}
```
fun是变量名不是函数名