页面由HTML(超文本标记语言)+CSS(层叠样式表)+Javascript(动态脚本语言)三部分组成
注意:在外链的script标签中间写的js代码不执行,也不报错
alert("..."); //alert自动将输出内容转为字符串
document.write("...");
cosole.log("...");
objNode.innerHTML = "...";
objNode.innerTEXT = "...";
JS由ECMAScript
、DOM(document object model)
和BOM(browser object model)
三部分组成
在js中严格区分大小写,常用命名法使用驼峰命名方式
js中的变量是松散类型的,声明的变量可存储任何数据类型;
js的数据类型有Number,String,Boolean,Null,Undefined,Object
其中基本数据类型由简单结构组成,如Number,String,Boolean,Null,Undefined
引用数据类型的结构相对复杂,分为:对象数据类型:object、数组、正则;函数数据类型:function
console.log(Number('12px')); //NaN
parseInt('12px');
parseInt('12px13');
parseInt('zhufeng2015');
parseInt('12.5px');
parseFloat('12.5px');
Number('12.5px');
var num = Number('12px'); //NaN
if( num == 12){
console.log(12);
}else if(num == NaN){
console.log(NaN);
}else{
console.log('以上都不是');
}
console.log(NaN == NaN); //false
console.log(isNaN("123")); //true
如果检测的值不是number数据类型,浏览器会默认把它转化成number数据类型,然后再比较转换规则
var obj1 = {name:'zhangsan',age:8};
var obj2 = {name:'zhangsan',age:8};
var obj3 = obj2;
console.log(obj1 == obj2);
console.log(obj2 == obj3);
console.log({} == "");
console.log([]==false);
var obj = [age:7];
var arr = [7];
console.log(obj == 7);
console.log(arr == 7);
console.log(1 == true);
console.log(2 == true);
console.log(2 == false);
console.log(7 == "7px");
console.log(true == "1");
console.log(null == undefined); //true
console.log(Number(null)); //0
console.log(Number(undefined)); //NaN
console.log("1" === 1);
console.log(0 === false);
console.log(null === undefined);
![] == false // true !先和[]运算,不等[]转为字符串
对象由多组属性名和属性值组成,属性名和属性值用来描述对象特征,创建方式有:
字面量创建方式
var obj = {name:'zhangsan'}
实例创建方式
var obj = new Object();
//增加属性名和属性值的方式
obj.name = 'zhangsan';
obj["name"] = 'zhangsan'; //方括号创建必须双引号属性名
//修改属性值,规定:对象中的属性名不允许重复,如果之前有就是修改,没有就是增加
obj.name = "zhufeng";
obj["name"] = "zhufeng";
//获取属性名和属性值的方式
console.log(obj["name"]);
console.log(obj.name);
console.log(obj.aa); //若对象中没有属性名,则返回undefined
//删除属性名和属性值
obj.name = null; //假删除,该属性值仍然存在
delete obj.name; //真删除,彻底删除属性名和属性值
对象数据类型中包含:对象类(Obejct),数组类(Array),正则类(RegExp),时间类(Date),字符串类(String),布尔类(Boolean),Math...对应的实例
js中对象、类、实例的区别:对象是泛指;类是对象的具体细分;实例是类中具体事物
基本数据类型操作的是值;引用数据类型操作的是引用内存地址
字符串
,包含"number","string","boolean","undefined","function","object"
typeof不能具体检查object下细分的数据类型,如:数组,对象,正则...console.log(typeof typeof typeof typeof []);
if(true){...}else{...}
if(...||...)
if(...&&...)
条件 ? 执行一 : 执行二;
条件 ? 执行 : void 0;
var num = 0;
switch(num){
case 0:
...;
break;
case 1:
...;
break;
default:
...;
}
每一种情况下都要加break,不加break的话后面条件不成立的情况的代码也会执行;每一种case比较都相当于===,所以要注意数据类型一致 第一步,设置初始值 var i=0; 第二步,设置循环执行条件 i<5; 第三步,执行循环体中的内容{...} 第四步,每一轮循环完成后执行i++操作
for(var i=0;i<5;i++){
if(){
continue;
}else{
break;
}
}
break:在循环体中出现后,整个循环立即结束 continue:在循环体中出现后,当前这轮循环停止,继续下一轮循环 在循环体中只要遇到这两个关键字,循环体后面的代码就不执行了
用来循环一个对象中的属性名和属性值
for(var key in obj){
console.log(key,obj[key]); //输出键和值
}
对象获取值若键值为数字,则obj.key方式不能获取到
循环顺序:若有数字为键值,则按照数字顺序由小到大循环,剩下的再按照对象中的顺序循环
var arr = [1,2,3,4];
var arr = new Array();
var arr = [14,15];
arr.push(16);
console.log(arr);
arr.unshift(17);
console.log(arr);
添加
元素var arr = [1,2,3,4];
console.log(arr.splice(0,0,5,6)); //[]
console.log(arr); // 5,6,1,2,3,4
添加
元素,从索引n开始,删除0个内容,并在索引n之前添加内容x;返回的是一个空数组;原有数组改变var arr = [1,2,3,4];
console.log(arr(1,0,5)); //[]
console.log(arr); //[1,5,2,3,4]
添加
元素var arr = [1,2,3,4];
console.log(arr.splice(arr.length,0,5)); //[]
console.log(arr); //1,2,3,4,5
arr.splice(n,m,x); 把原数组中的某些项进行替换,从索引n开始删除m个元素,用x替换原来的,并返回删除
的内容
var arr = [1,2,3,4];
console.log(arr.splice(1,2,5,6)); //2,3
console.log(arr); //1,5,6,4
arr.splice(n,m); 从索引n开始(包含n),删除
m个元素,并将删除的内容作为数组返回
var arr = [1,2,3,4];
console.log(arr.splice(1,2)); //2,3
console.log(arr); //1,4
var arr = [1,2,3,4];
console.log(arr.splice(arr.length-1,1));
var arr = [1,2,3,4];
console.log(arr.pop()); //4
console.log(arr); //1,2,3
var arr = [1,2,3,4];
console.log(arr.shift()); //1
console.log(arr); //2,3,4
var arr = [1,2,3,4];
console.log(arr.slice(1,2)); //2
console.log(arr); //1,2,3,4
var arr = [1,2,3,4];
console.log(arr.slice(1)); //2,3,4
console.log(arr); //1,2,3,4
var arr = [1,2,3,4];
console.log(arr.slice()); //1,2,3,4
console.log(arr); //1,2,3,4
虽然slice()也能复制一个数组出来,但是这个方法只是查询出了所有元素,真正的复制方法为concat()
var arr = [1,2,3,4];
var arr2 = arr.concat();
console.log(arr2);
var arr = [1,2];
var arr2 = [3,4];
console.log(arr.concat(arr2)); //1,2,3,4
console.log(arr2.concat(arr)); //3,4,1,2
var arr = [1,2,3,4];
console.log(arr.toString); //"1,2,3,4"
console.log([] == ""); //true
var arr = [1,2,3,4];
var str = arr.join("+")
console.log(str); //"1+2+3+4"
console.log(eval(str)); //10
var arr = [1,2,3,4];
arr.reverse();
console.log(arr);
var arr = [4,1,3,2];
arr.sort();
console.log(arr); //1,2,3,4
当需要排序10以上的数组时需要传递参数sort(function(a,b){return a-b;}),其中a代表每次循环的当前项,b代表后面的项var arr = [11,16,15,17,12,14,13];
arr.sort(function(a,b){return a-b;});
console.log(arr);
var arr = [1,2,3,4,5];
console.log(arr.indexOf(3)); //返回元素3所在的索引位置:2
console.log(arr.indexOf(3,1)); //从索引1的位置处开始查找元素3的所在位置:2
//若在指定位置后没找到的话则返回-1
var arr = [1,2,3,4];
arr.forEach(function(e){
if(e<=3){
alert(e)
}else{
return ;
}
});
创建函数,关键字为function
执行函数,函数名后带小括号
创建一个函数时,首先开辟一段内存空间,浏览器为其分配一个16进制的地址;把函数中的代码以字符串
的形式存储到空间内;再把当前的地址
赋值给函数名
函数执行步骤:
函数执行时,会为js代码提供一个私有作用域;把字符串变为js代码,并从上至下执行
私有作用域保护了里面的变量不受外界干扰,这种形成的保护机制叫闭包
由于闭包的机制导致了在函数体外面无法获取里面变量的值,所以需要关键字return为函数提供出口
return 并不是把变量返回给外边,而是把变量的值返回到外边
若没有写return则默认返回结果为undefined;若只写return而没写变量,则为undefined
函数在return 之后,后面的语句不再执行
arguments为函数接收参数的集合,但是它不是数组,而是一个类数组
arguments的数据类型为对象;以数字作为索引,0开始;有length属性;
函数的形参作用:用来实现一个功能,把需要的变量定义到形参上,在执行时提供
根据参数的不同,函数可以实现一个功能的多种形态
若定义了形参而执行时未赋值,则为undefined
arguments.callee代表当前执行函数的本身,它在哪一个函数中运行,就代表哪个函数
;(function(num){
//定义部分
})(100); //执行部分
~function(){}();
!function(){}();
+function(){}();
-function(){}();
var a = function(){}