ECMAscript:描述了JS的语法和基本对象(核心)、
DOM(文档对象模型:操作节点)、
BOM(浏览器对象模型:document,alerr,location等等)
2、javascript基本类型:字符串string,number和(boolean)布尔类型
3、js复合类型(对象类型)有:Array、Date、Number、Boolean、Object、RegExp(正则表达式)、Math、Function
两个核心类型:Object、Function
4、两个空类型:undefine和null
5、js获得类型的运算符是:typeOf,
该运算符返回的数据类型是:字符串(string)类型
6、===:全等,既比较值,也比较类型
7、in运算符:判断对象有某种对象成员或者属性,对象是键值对的集合
var o={name:'Jim'};
var s1='age';
console.log(s1 in o)返回的是boolean类型
判断对象方法有某种属性的方法
(1)if(s1 in 0)
(2)对象就是键值对的集合
var has=false;
for(var k in o){
if(k==s1){
has=true;
break;}}
(3)//浏览器能力检查的代码
if(!document.getElementsByClassName){//有该方法}else{//没有该方法}
因为document.getElementsByClassName为undefine,所以!document.getElementsByClassName就为true
if(o.age){}判断是否有age
var s3="age";
//如果希望使用s3来判断 对象o 是否有该属性
if(o[ s3 ]){}//关联数组
8、条件运算符:> == === < <= >= != !==
9、创建对象可以使用:new或者直接量(字面量)
重要:值类型和引用类型
(1)、值类型:按值传递,将变量中的数据完成的拷贝一份,赋值给新的变量
var num=123;
var num2=num;
//此内存中有两个123副本
console.log(num,num2);//123,123
num=1;
console.log(num,num2);//1,123
num2的值没变
(2)、引用类型:表示变量存储的是数据的地址(引用)
var o={n:123;}//对象
var o2=o;
//内存中只有一个数据对象,是将o中的地址赋值一份,赋值给o2
//既o和o2同时指向数据
console.log(o.n,o2.n);//123,123
o.n=1;
sonsole.log(o.n,o2.n);//1,1
注意:对象中的属性是值类型
var o3={
n:[1,2,3];
m:{n:123}
}
输出数组中第二个元素:o3.n[1];
10、js中什么叫逻辑中断:
//如果传入num的值就打印num的值,如果没传入就打印没有参数
function fn(num){
if(num!==undefine){
console.log(num);
}else{
console.log("没有参数");
}
fn(123);
fn();
结果:123
没有参数
方法二:三元运算符
var number=num!==undefine?unm:"没有参数"
方法三:短路
function fn(num){
num=num||"没有参数“;
console.log(num);
}
fn(123);
|| :如果第一个为真就返回第一个表达式,如果为假,就返回第二个表达式
&& :如果第一个为假,就返回第一个表达式,如果为真,就返回第二个表达式
表达式1&&表达式2&&表达式1:验证表达式1是否满足,如果满足表达式1,就执行表达式2的代码,再返回表达式1
11、js中delete运算符的作用是:
delete 删除;
语法:boolean delete数据;
在当前作用域上删除数据;
用法:
(1)、删除数组中的一个元素
(2)、删除一个对象的属性或者方法
(3)、删除一个没有用var声明的变量
var arr=[1,2,3,4];
var isTrue=delete(arr[2]);
console.log(arr);
console.log(arr.length);
结果:[1,2,4]
4
因为delete只是把第三个元素删除,把相对应的数据变成undefine。
var o={name:"alvin"};
var isTrue=delete o.name; //o.name===o["name"] //isTrue=true;
//在jquery清除缓存框架的时候用到此方法
var n=1//如果没在后面加上分号或者逗号,默认会在后面加上分号,
m=2 //如果在1后面默认加上分号,那么m=2就变成全局变量
var isTrue1=delete n;
var isTrue2=delete m;
console.log(isTrue1);//false
console.log(isTrue2);//true
console.log(n);//1
console.log(m);//报错,is not define
//is not define 和undefine的意义不一样,前者为报错,后者没定义
12、 function fn(){
console.log(num);
console.log(123
}
fn();//报一次错,因为js出现错误后不再继续执行下面代码
fn();
有些时候代码的错误是需要处理的,但是不清楚是否会在这里报错
try catch语法:
try{
可能出现错误的代码
}
catch(e){
如果try中出现错误才会执行
}
finally{
无论是否出现异常,最后执行,可选
}
function fn(){
try{
console.log(num);
}
catch(e){//
console.log(e);//e是try异常后抓回来的异常结果,异常的内容
//console.log("num“没有定义);
}
console.log(123);
}
fn();//结果:num未定义
fn();//结果:123;
e:这里的错误有一个属性叫异常 exception
try:试一下
catch:抓住 异常
13、自己抛出异常:throw
语法:throw + 对象
一般对象是:new Error("错误消息");
function fnError(){
throw new Error("我是一个自定义错误");
}
function fnc(){
try{
fnError();
}
catch(e){
console.log(e):
}
fnc();
结果:我是一个自定义错误
14、循坏语句有四种,for、while、do...while和for..in....
15、分支语句有两种,if ....else和switch...case...
16、跳转语句:break和continue;
break:跳出循坏
continue:跳出本次循坏
函数与对象:定义函数的基本语法
1、声明式函数:
fnc();
function fnc(){
console.log(123);
}
注意:A、声明式函数最后面是不需要分号的,它不是语句;B、声明式函数在前面或者后面都可以调用
js执行:预解析,一句一句执行,分为两步走;在js执行第一条fnc()时候,早已经将fnc()的函数读取了,所以直接解析。
重点:声明式函数不允许出现在表达式中
if(false){
function fn(){
console.log(123);
}
}
fn();
结果:123
因为在执行IF的时候,function fn(){console.log(123)}这条代码不存在在表达式中,已经自动调出来了
2、函数的字面量(直接量 Lamda表达式)
fn();//函数字面量特点:函数fn();在上面是无法调用下面的语句的,结果:is not the function,
var fn=function(){//function(){}自动变成了表达式,而不是函数,所以没有值
};//后面有分号,所以不是表达式,是语句:表达式+分号
注意:此时函数做为表达式存在,凡是将数据和运算等联系起来,有值的式子就是表达式:
1 是表达式,以为 +1=1;
1+2;
new Data()
function(){} 都是表达式
3、new Funcion