1.js早期是用来完成在本地的表单验证
2.js的组成
核心:ECMAS script5
DOM:document object model
BOM:browse object model
3.js的使用
1.内部标签<script></script>
2.外部引入js为后缀的文件 <script src="" >再写在这个标签里的js内容会被忽略</script>
4.js的注释
单行注释://
多行注释:/**/
5.关键字和保留字
6.变量
var
1.变量声明能够被提升
2.变量可以重复使用
3.没有局部作用域
##用var声明的被声明在函数里的是该函数的局部变量
var a;//声明但不赋值
var a=10;//声明并赋值
b=10;//
var a=10,b=20,c=30;
let
1.变量声明不能提升
2.在同一作用域里不能重复声明
3.局部变量
const
1.变量声明不能提升
2.在同一作用域里不能重复声明
3.如果声明的是常量,则内容不能被修改
如果声明的是引用数据类型,地址不变,内容还是能够被修改的
7.数据类型
1.五种基本数据类型
number数字
进制数:10进制 16进制 8进制
浮点数
不是数 NaN ——>isNaN 判断一个数是不是不是数
无穷 infinity ——>isInfinite 判断一个数是不是属于数字范围/是不是不是无穷
boolean布尔
true/false
string字符串
用引号括起来
null 空引用
指向的是一个空地址
undefined 未定义
1.声明但未赋值
2.声明为undefined的变量
3.未被声明并赋值的变量
2.引用数据类型
object
3.检测数据类型 typeof
返回值有 number undefined object function string
##null值的返回类型是object
8.值传递和引用传递
1.值传递是传递属性值,将属性值复制赋值,并不会影响属性值
2.引用传递的是传递地址,如果传递后有改动,原地址的存储空间也会被改变
9.操作符
1.算术操作符
+ +=
a+=b —>a=a+b
1.如果都是number 直接相加
2.如果是其他类型但不是string和object类型则转成成number类型相加
3.都是字符串直接拼接,或者转换成字符串后拼接
4.object会默认使用toString进行转换
- -=
* *=
/ /=
% %=
2.比较操作符
<
>
==
1.转化成number类型比较
2.字符串比较ASCII码
<=
>=
===全等 只比较不转换 数据类型和值都比较
3.三目运算符
判断语句?true:false
4.一元运算符
+ 正值 +a(转换number类型)
- 负值 -(-a)转换number类型
++自增
在前先自增在操作 在后先操作后自增
-- 自减
在前先自减在操作 在后先操作后自减
5.逻辑运算符
逻辑与&& 同真才真 有假则假
如果第一个值为""/0/false/null/undefined/NaN 则输出第一个操作数
如果第一个值为其他,则输出第二个操作符
逻辑或 || 同假才假 有真则真
如果第一个值为""/0/false/null/undefined/NaN 则输出第二个操作数
如果第一个值为其他,则输出第一个操作符
逻辑非 !转换成boolean值后 取反
10.类型转换
转换成number
1.+a
2.-(-a)
3.Number()
null // 0
undefined //NaN
ture // 1
false // 0
12 //12
12.3 //12.3
"12.3" //12.3
"1+2.3" //NaN
"+12.3" //12.3
"123ab" //NaN
"0xa" //10
"010" //10
"" //NaN
4.parseInt()
null // NaN
undefined //NaN
ture // NaN
false // NaN
12 //12
12.3 //12
"12.3" //12
"1+2.3" //1
"+12.3" //12
"123ab" //123
"0xa" //10
"010" //10
"" //NaN
5.parseFloat()
null // NaN
undefined //NaN
ture // NaN
false // NaN
12 //12
12.3 //12.3
"12.3" //12.3
"1+2.3" //1
"+12.3" //12.3
"123ab" //123
"0xa" //0
"010" //10
"" //NaN
转换成string
toString()
null和undefined不能调用
String()转化函数
“”+其他类型
转换成Boolean
Boolean()
false:0/null/undefined/""/NaN
!!a 两次取反就是转化数据类型
11.流程控制语句
分支语句
if else
switch case break
循环语句
for(初始化; 结束判定条件; 迭代)
{
循环体
}
初始化;
while(结束判定条件) {
循环体;
迭代
初始化;
do {
循环体;
迭代
}while(结束判定条件)
for-in
for(var key in arr/obj) {
console.log(arr/obj.key);
console.log(arr/obj[key]);
}
12.对象object
1.创建
对象字面量
var obj={}
构造函数
var obj=new Object()
2.访问
点访问 obj.name
中括号 obj[frist name] 变量或者复杂的标识符
3.删除
delete obj.name
4.检测属性
in 检测属性是不是当前对象的私有属性或继承属性
hasOwnProperty()测试属性是不是当前对象的私有属性
propertyisEnuerable()测试当前属性是否是私有属性并且能被枚举
5.默认属性和方法
constructor
toString()
valueOf()
6.对象序列化
JSON.parse:将json字符串转为对象序列(在一个新的地址里了)
JSON.stringify:将对象序列转换成json字符串
7.构造函数和原型对象
#每一个构造函数都有一个原型函数
每一个原型函数都有一个constructor
静态方法/属性:
Object.assign(a,b)将b对象合并到a对象中
Object.keys() 当前对象的所有属性名所组成的数组
Object.values() 当前对象的所有属性值所组成的数组
Object.defineProperty()自定属性
//基础属性描述 value;writrable;enumerable;configurable
//存取操作符:set:function(){} get:function(){}
非静态方法:
toString()
valueOf()
hasOwnProperty()
13.函数function
1.创建
函数声明 function say(){}
函数字面量 var say= function say(){}
匿名函数 (function(){})立即调用
2.调用
函数名()
new 函数名()
函数名.call()
函数名.apply()
3.参数
形式参数
实际参数
#js中实际参数和形式参数可以个数不一样 类型不一样
4.函数的内部属性
argumens 类数组对象用来存储拥有当前arguments的函数的实参
arguments有callee 和length两个属性
callee在函数内部指向当前函数
length函数参数的个数
this 是函数赖以生存的环境变量
#this什么时候确定 拥有当前this的函数被调用的时候
#this指向谁 谁调用拥有当前this的函数 this就指向谁
形参也是函数的内部函数
5.函数的属性和方法
length 表示函数希望接收到参数个数
apply 改变环境变量的指向 无参数时调用函数
call改变环境变量的指向 无参数时调用函数
6.函数的应用
作为返回值运用
作为参数运用
14.数组
1.创建
数组字面量
var arr=[]
构造函数
var arr= new Array()
如果只有一个参数且为number类型//创建该number长度的数组
如果有好几个参数//则创建包含这些参数的数组
2.访问
数组名[索引]
当索引<当前数组的长度 则访问到数组索引-1的数组元素
当索引>当前数组长度 则添加数组长度到索引-1的长度
3.检测数组
Array.isArray(数组名)检测当前某个值是不是数组类型
补:
Array.from()将类数组对象(具有length属性并且属性名为number或者内容为number的字符串)转换成数组
Array.of()将当前参数当作数组元素创建该数值(创建数组)
4.数组序列化
运用toString把数组元素用字符串形式返回数组项
join() 改变数字元素之间的间隔符号
2.添加或删除
栈:
pop() 删除数组的最后一项 无参数 返回值是删除的数组元素
push() 添加参数在数组最后,参数是想添加的元素 返回值是数组添加元素的长度
队列
shift()删除数组的第一项 无参数 返回值是删除的数组元素
unshift() 添加参数在数组开头 参数是想添加的元素 返回值是数组添加后的长度
3.切换
reverse 将数组反转顺序 返回值是反转后的数组
sort()
1.无参数时 默认将数组toString转换成字符串后输出
2.自定义排序 可以调用 回调函数
如果是正数则将第一个参数往后移 反之、