-
js是弱类型语言
-
基本数据类型
number:整数和小数(最高精度17位小数)、NAN、infinity、-infinity
undefined:变量声明为赋值
null:一个空的对象引用(也就是赋值为null)
Boolean:
String:
(js不区分单双引号 “” 、 ‘’)引用类型:object(对象、数组、date、RegExp…)
3.typeOf 操作符 typeof null返回object
eval()函数
对以字符串形式表示的任意有效的Jscript代码求值
var anExpression = "6 * 9 % 7";
var total = eval(anExpression); // 将变量 total 赋值为 5。
var yetAnotherExpression = "6 * (9 % 7)";
total = eval(yetAnotherExpression) // 将变量 total 赋值为 12。
4.数组
var id = [];
var id = new Array();//js数组长度可以任意改变
1)、push 和 pop 方法
var ss = id.push(1,true,2,new Date());//push方法向数组追加元素,返回新数组长度
var sss = id.pop();//pop方法从数组尾部移除一个元素,返回移除元素的内容
2)、shift 和 unshift方法
shift方法从数组头部移除一个元素,返回元素内容
unshift方法向数组头部添加元素,返回新数组的长度
3)、splice 和 slice 方法
id.splice(star,end,arg...);//star:截取开始下标 end:截取个数 args:在截取的位置新增元素 数组本身发生变化
id.slice(star,end);//slice:不操作数组 只从数组中拿去star-->end下标的内容 不包括end
4)、concat 和 join
concat:合并数组
var arr1 = [1,2];
var arr2 = [2,3];
var arr3 = arr1.concat(arr2);//[1,2,2,3]
join:元素之间加入内容转换成字符串 与toString作用相同
var arr1 = [1,2,3];
var arr2 = arr1.join("-");// 1-2-3
5)、sort 和 reverse
reverse:逆序
sort:排序 从小到大 字典排序方式
例:arrayobj.sort(sortfunction)
参数arrayObj 必选项。任意 Array 对象。
sortFunction 可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,
那么元素将按照 ASCII 字符顺序进行升序排列。
说明
sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。
如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:
负值,如果所传递的第一个参数比第二个参数小。
零,如果两个参数相等。
正值,如果第一个参数比第二个参数大。
=log:2016/3/9=====
6)、indexof 和 lastindexof
indexof(arg);//返回第一个arg的index
indexof(arg1,arg2);//arg1查询起始位置,返回从下标arg1开始第一个arg2的index
lastindexof(arg);//返回最后一个arg的index
比较采用的是 ===
7)、ECMA5新方法
Array.prototype.indexOf
Array.prototype.lastIndexOf
Array.prototype.every -->传递function做参数,数组每个元素运行函数,如果每一项都满足返回true 则返回true
Array.prototype.some -->传递function做参数,数组每个元素运行函数,如果有一项满足返回true 则返回true
Array.prototype.forEach -->循环数组每一项 并执行一个函数
Array.prototype.map -->传递function做参数,数组每个元素运行函数,返回执行后的结果
Array.prototype.filter -->传递function做参数,数组每个元素运行函数,返回满足条件过滤后的结果
function(item , index , array){}
Array.prototype.reduce
Array.prototype.reduceRight
5.Object
1)、
Object obj = new Object(); 或 Object obj = {};
设置属性
obj.name = “张三”; 或 obj[“name”] = “张三”;
设置方法
obj.say = function(){
方法体;
}
访问对象属性或方法
alert(obj.name);
obj.say();
删除对象属性或方法
delete obj.name;
delete obj.say;
遍历一个js对象 采用for in
for(var attr in obj){
alert(attr + ":" + obj[attr]);
}
2)、Object 具有的属性和方法
constructor:保留着创建当前对象的创建方法(构造方法)
alert(obj.constructor);
hasOwnProperty(propertyName);//验证给定属性是否在对象中存在
obj.hasOwnProperty("name");
isPrototypeOf(obj);检查传入对象是否是另外一个对象的原型
propertyIsEnumerable(propertyName);//检查给定的属性是否能够使用for in 语句来枚举
toLocaleString();返回对象的字符串表示,改字符串与执行环境的地区对应
toString();返回对象的字符串表示
valueOf();返回对象的字符串、数值或布尔表示
======》练习 3)、模拟Map
function map(){
var obj = {};
this.put = function(key, value){
obj[key] = value;
}
this.size = function(){
var count = 0;
for(var attr in obj){
count ++;
}
return count;
}
this.get = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
return obj[key];
}else{
return null;
}
}
this.remove = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
delete obj[key]
}
}
this.eachMap = function(fn){
for(var attr in obj){
fn(attr,obj[attr]);
}
}
}
// var m = new map();
// m.eachMap(function(key,value){
// alert(key + " : " + value);
// });
去掉数据重复项
var arr = [1,3,5,2,4,6,1,5,2];
var obj = {};
for(var i=0; i<arr.length; i++){
obj[arr[i]] = arr[i];
}
var arr2 = [];
for(var attr in obj){
arr2.push(attr);
}
alert(arr2);// 1,3,5,2,4,6
=log:2016/3/11====
6.单体对象
Global 全局的 终极的 兜底的 (这个对象不存在)
编码:
encodeURI();// ?/不会进行编码
encodeURIComponent(); // 常用方法(任何不标准的文字都会进行转码)
解码:
decodeURI();
decodeURIComponent();
eval(String) // 无形的JavaScript解析器
例: var str1 = “var a = 10;var b = 20;”;
eval(str1);
alert(a+b); //30
eval处理对象;
例:var Stringobj = "{name : 'Z3' , age : 30}";
var obj = evl('('+ Stringobj +')');
alert(obj.name);
parseInt
parseFloat
escape //中文转码
unescape//解码
isNAN //如果不是number true 如果是 false
Math 对象
7.Date 对象
8.基础类型包装类 Boolean String Number和java用法类似
9.函数 function(参数列表){
执行体;
}
//3.种定义方式
1).function test1(){}; 优先加载 当前作用域
2).var test2 = function(){}; 顺序加载 当前作用域
3).var test3 = new function(); 顺序加载 顶层作用域
arguments:
例: function test(a,b,c,d){
alert(test.length);//形参个数 4
alert(arguments.length);//实参个数 2 arguments 内部对象 可以访问函数的实际参数
alert(arguments[0]);// 10
alert(arguments[1]);// 20
return a + b;
arguments.callee 指向函数自身,常用作递归
}
test(10,20);
function aa(n){
if(n<=1){
return 1;
}else{
return n * arguments.callee(n-1);// n * aa(n -1)
}
}
- this 对象
this对象是在运行时基于函数执行环境绑定的,在全局函数中,this等于window。而当函数被作为某个对象的方法调用时,
this等于那个对象。
也就是说this总能指向调用者。
=log:2016/3/14====
-
call,apply
简单用法:绑定一些函数 用与传递参数 调用
主要功能是扩充作用域–>对象和方法之间不需要任何的耦合关系
demo:
function sum(a , b){
return a + b;
}function call9(x , y){ return sum.call(this , x , y);//this指call9 // 把sum函数绑定到call9作用域中 call9具有sum的功能 } function apply9(m , n){ return sum.apply(this , [ m , n ]);//this指apply9 //apply与call的不同是参数为数组类型 }
扩充作用域demo:
var color = ‘red’;
var obj = { color : blue };function showColor(){ alert(this.color); } showColor.call(this);//red showColor.call(obj);//blue
12.执行环境、作用域链
说到作用域链,不得不说with语句。with语句主要用来临时扩展作用域链,将语句中的对象添加到作用域的头部
person={name:“yhb”,age:22,height:175,wife:{name:“lwy”,age:21}};
with(person.wife){
console.log(name); // lwy
}
with语句将person.wife添加到当前作用域链的头部,所以输出的就是:“lwy".
with语句结束后,作用域链恢复正常。
执行环境:定义了变量或函数有权访问其他数据,决定了他们各自的行为。
每一个执行环境都有一个与之有关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
虽然我们的代码无法访问这个对象,但解析器处理数据时会在后台执行它。
全局执行环境:最外围的执行环境
每一个函数都有自己的执行环境,当执行流进一个函数时,函数的环境就会被推进一个环境栈中。函数执行之后
栈将执行环境弹出,把控制权限返还给之前的执行环境。当代码在一个环境中执行时,会创建变量对象
的作用域链。作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问。
13.closure 闭包
闭包:一个函数可以访问另一个函数中的变量
封闭性:起到一个保护变量的作用(private)
例子:
var name = "zhangsan";
var obj = {
name:"tian",
getName:function(){
return function(){
return this.name;
};
}
};
var cc = obj.getName();
alert(cc());// window.cc() --> zhangsan
var name = "zhangsan";
function obj(){
name="tian";
return function getName(){
alert(this.name);
};
};
obj()();// --->tian
var name = "zhangsan";
function obj(){
this.name="tian";
function getName(){
return name;//undefined
return this.name;//tian
};
return {getName:getName};
};
var aa = obj();
alert(aa.getName());