**
变量
**
什么是变量?
变量是用来存储数据的 关键字是var 是在内存中 开辟一个区间 来存储数据
如何用:
1.声明变量
var 变量名
2.给变量赋值
变量名 = 值;
3.调用
之间用变量名 ; 但是直接用变量名是看不到的 我们需要借助 日志输出
4.输出方式 :
console.log();
alert();
prompt() 输入框
变量名的命名规则和规范
。由数字、字母、下划线、$构成
。不能用数字开头
。严格区分大小写
。不能用关键字和保留字段
。遵循驼峰命名法
。要有语义
操作符
算数运算符
-
-
- / % 先乘除后加减 如果有括号 先算小括号里面的
比较运算符
- / % 先乘除后加减 如果有括号 先算小括号里面的
-
< >= <= == ===
==:只比较内容
===:既比较内容又比较类型
逻辑运算符
&& || !
&& :
&&: and的意思, 操作符两边都是true,才会返回true,只要有一边为false,那么返回的就是false
逻辑中断:从左至右依次执行,如果当前表达式是true的话,继续往右执行,直到碰到表达式是false,那么就直接返回表达式的值
|| : or 的意思,操作符两边只要有一边是true,那么就返回true,如果两边都是false,才返回的是false
逻辑中断:从左至右依次执行,如果当前表达式是false的话,继续往右执行,知道碰到表达式是true,那么就返回该表达式的值
!:取反的意思
赋值运算符
var num = 10;
num +=5; // == num = num + 5;
前置运算符和后置运算符
前置++: 先自身加1,然后把值返回
后置++:先返回值,然后再自身加1
运算符的优先级
- 小括号
- 一元运算符
- 算术运算符
- 关系运算符
- 比较运算符
- 逻辑运算符
- 赋值运算符
流程控制
顺序流程
代码从上至下,依次执行
分支流程
一个分叉路口
if语句
语法:
if(条件表达式){
代码1
}else{
代码2
}
如果条件表达式为true,那么执行代码1,如果是false,那么执行代码2
多分支语法:
if(条件表达式){
}else if(条件表达式){
}else if(条件表达式){
}...
else{
}
从上至下依次去判断条件表达式是否成立,如果其中一个成立,会进入相应的执行语句,当代码执行完,不会再进入后面的分支
switch语句
语法
switch(value){
case value1:
break;
case value2:
break;
...
default:
break;
}
直接跳到与传递进来value值相等的这一个分支
循环流程
不停的执行一些代码
for循环
语法:
for(初始化变量; 条件表达式; 操作表达式){
//循环体
}
执行过程
- 1.执行初始化变量
- 2.执行条件表达式,如果成立,进入循环体,如果不成立,跳出循环
- 3.执行循环体里面的代码
- 4.执行 操作表达式
- 2 3 4 重复执行
双重for循环
for(初始化变量; 条件表达式; 操作表达式){
for(初始化变量; 条件表达式; 操作表达式){
//循环体
}
}
外层循环执行一次,内层循环执行所有次数
while循环
语法:
while(条件表达式){
//循环体
}
只有当条件表达式成立的时候,才会进入循环体,循环体执行完了,又会跳到条件表达式这里进行判断
do…while循环
语法:
do{
}while(条件表达式);
先执行do里面的循环体,然后再判断条件是否成立,如果成立,继续执行循环体,如果不成立,跳出循环
continue break return
continue: 跳出本次循环,循环还会继续,那么continue后面的代码不会执行
break: 跳出整个循环,循环不再继续,那么break后面的代码不会执行
return: 跳出循环,中止函数的执行,return后面跟什么就返回什么,如果return后面不跟东西,返回式 undefined
数据类型
简单数据类型
number 数值类型
整数 int
浮点数 float
如何把其他类型转成number
parseInt(‘60px’);//直接取整,后面的小数不要 60
parseFloat('60.2px');// 获取小数 60.2
//如果说数值后面带了非数字类型的,会把数值返回,非数值的过滤掉
string 字符串
被引号引起来的,都是字符串
字符串如何拼接 用 + 号
如何把其他类型转成string
var num = 5;
num + '';
boolean 布尔类型
true,false
隐式转换,只要是要条件表达式的地方,都会默认做一个隐式转换
只有5种情况转成false
- 0
- ‘’
- NaN
- null
- undefined
undefined 未定义
null 空对象
复杂数据类型
函数
函数是用来封装一定功能的代码块,可以重复来调用
语法:
//命名函数
function fn(){
}
//函数声明了不会自己执行里面代码,必须要调用
fn();
//匿名函数
var fn = function(){
}
fn();
参数
形参:写在函数的声明上面,相当于一个变量来占位
实参:写在函数的调用上面,是实实在在的值
返回值 return
arguments
是伪数组,是实参的集合,使用方法跟数组是一样的
自定义对象
对象是什么
指的是一类具体的事物
对象的初始化
//字面量的方式
var obj = {
name: 'zs',
age: 18,
play: function(){
}
}
//new Object
var obj = new Object();
obj.name = 'zs';
obj.age = 18;
obj.play= function(){
}
//构造函数
function Person(name,age){
this.name = name;
this.age = age;
this.play = function(){
}
}
//需要去实例化对象 就是new对象
var obj = new Person('zs',18);
//如何去使用属性或者调用方法呢
obj.name;//取属性值
obj.play();//调用方法
对象的遍历 for in
//构造函数
function Person(name,age){
this.name = name;
this.age = age;
this.play = function(){
}
}
//需要去实例化对象 就是new对象
var obj = new Person('zs',18);
for(var key in obj){
//key 就是对象里面的属性名
obj[key]; //才能拿到属性值
}
内置对象
Math 算术对象
只要是做算术相关的,就找Math
Math.max(); //获取最大值
Math.min(); //获取最小值
Math.abs(); //绝对值
Math.floor(); //向下取整
Math.ceil();//向上取整
Math.round(); //四舍五入
Math.random(); //随机数 [0,1) 能娶到0,取不到1
Date 日期对象
只要是做日期相关的操作,找Date
var date = new Date();//获取的是当前时间
//需要做格式化
date.getFullYear();// 获取年份
date.getMonth(); //获取月份 0 ~ 11
date.getDate(); //获取日
date.getDay(); //获取星期
date.getHours(); //获取小时
date.getMinutes(); //获取分钟
date.getSeconds(); //获取秒
//获取毫秒的方法
date.valueOf();
date.getTime();
var date = +new Date();
Date.now();
Array 数组
数组 就是用来存放一组数据的
数组的声明方式
var arr = [];
var arr = new Array();
数组的方法
arr.push(); //追加元素
arr.pop(); //删除最后一个元素
arr.unshift(); //在第一个位置添加元素
arr.shift(); // 删除第一个元素
arr.indexOf();// 检测数组里面是否有这个元素
arr.length; //数组的长度
arr.reverse(); //翻转数组
arr.sort(); //排序
arr.join();//转换成字符串
遍历
就是把数组里面的元素一个一个拿出来,要配合for循环来使用
String 字符串
var str = '';
str.substr(startIndex,length); //截取字符串
str.replace(要被替换的字符,替换的字符); //替换
str.split(需要切割的符号); //切割 返回值是一个数组
str.charAt(); //根据索引返回对应的字符
str.indexOf(); //根据字符检测对应的索引
str.length; //字符串的长度
typeof 检测简单数据类型
instanceof 用来检测复杂数据类型
作用域相关概念
作用域: 变量的作用范围
全局作用域: 整个页面,声明的变量是全局变量,整个页面都可以用
局部作用域:作用函数内部,声明的变量是局部变量,只能用于函数的内部
作用域链: 就是查询变量的规则,就近原则,先看本作用域中是否有,如果有,直接使用,如果没有,往上一层去找
预解析
执行js的时候分两步,先进行预解析,然后再执行代码
特点:
- 会把变量的声明提升, var 提升,不包含赋值
- 会把函数的生命提升,function 提升,不包含调用