JavaScript学习笔记(二)


    //===延长作用于链======
    // with()
    function buildUrl(){
        var qs="?debug=true";        
        with(location){
            var url = href +qs;
        }
        return url;
    }        
    var result1 = buildUrl();
    alert(result1);
    
    //====没有块级作用域=====
    if(true){
        var color = "blue";
    }
    alert(color); //->bule;在JavaScript中,if语句中的变量声明会将变量添加到当前的执行环境中。
    
    for(var i=0;i<10;i++){
        
    }
    alert(i); //->10; 对于JavaScript来说,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环体外部的执行环境中。
    
    //======1.变量声明=====
        //对比
/*
        function add(num1,num2){
            var sum = num1+num2;
            return sum;
        }
        var result = add(10,20);
        alert(sum); //提示错误 sum 未定义
        
        function add(num1,num2){
            sum = num1+num2;
            return sum;
        }
        var result = add(10,20);
        alert(sum); //->30;sum是全局变量
*/
//=======2.查询标识符=========
//对比
    var color ="blue";
    function getColor(){
        return color;
    }
    //alert(getColor());//->"blue";查找过程:调用函数getColor()时会引用变量color。
                                //(1)先搜索getColor()的变量对象,查找其中是否包含一个名为color的标识符。
                                //(2)在没有找到的情况下,搜索继续到下一个变量对象(全局环境的变量对象),然后再那里找到了color
    function getColor1(){
        var color ="red";
        return color;
        //return window.color; //->"blue",此时访问的是全局环境的变量
    }
    alert(getColor1());    //->"red";(3)在找到的情况下,搜索就停止了。

 


//===作用链域====== var color = "blue"; /* function changeColor(){ if(color=="blue"){ color ="red"; }else{ color="yellow"; } } changeColor(); alert("Color is now "+color);//输出 Color is now red */
//====Object类型====== //一、创建Object实例的方式有两种。 //第一种是使用new操作符后跟Object构造函数 /* var person = new Object(); person.name = "Yoyo"; person.age = 24; alert(JSON.stringify(person)); */ //第二种是使用对象字面变量表示法 /* var person = { name:"YY", age:29 }; */ //alert(JSON.stringify(person)); //alert(person.name); //alert(person["name"]); //====对象字面量====== /* function displayInfo(args){ var output = ""; if (typeof args.name == "string") { output += "Name:" + args.name + "\n"; } if(typeof args.age=="number"){ output+="Age:"+args.age+"\n"; } alert(output); } displayInfo({ name:"YY", age:24 }); displayInfo({name:"Yoyo"}); */ //========Array========= var colors = ["red","blue","green"]; //alert(colors[3]); colors[2]="black"; colors[4]="brown"; //当大于数组长度时,会自动添加到数组,长度加1. //alert(colors); //if(colors instanceof Array){ //instanceof Array确定某个对象是不是数组 // alert("colors is Array."); //} //======1.arrayObject.join(separator)==== alert(colors.join("-")); //若某一项是null或者undefined,那么该值在join()、toLocaleString()、toString()和valueOf()方法的返回的结果中以空字符串表示。
//===栈方法====
var colors = new Array();
var count = colors.push("red","green");
//alert(count); //->2
//alert(colors); //red,green

count = colors.push("black");
alert(colors.length); //->3
alert(count); //->3

var item = colors.pop();
alert(item); //->black
alert(colors.length); //->2

 

//===shift()与 push()结合使用模拟队列====
var colors = new Array();
colors.push("blue","red");
alert(colors); //blue,red
var item = colors.shift();
alert(item); //blue; blue出队
alert(colors); //red; colors长度减1

 

  

1 //====unshift()与pop()结合反向模拟队列=====
2 var colors = new Array();
3 var count = colors.unshift("blue","red");
4 alert(count); //2
5 alert(colors);//blue,red
6 colors.unshift("hello"); //插入到队头
7 alert(colors); //hello,blue,red
8 colors.pop();//尾出队
9 alert(colors); //hello,blue

 

//=======reverse()反转数组 、sort()数组排序=====
var values = [1,2,3,4,5];
values.reverse();
alert(values); //5,4,3,2,1

var values1=[10,8,19,20,3];
values1.sort();
alert(values1); //10,19,20,3,8
            //sort()方法会调用每个数组项的toString()转型方法,然后比较。
//sort()与比较函数一起,可以完成数值排序
function compare(v1,v2){
    if(v1<v2){
        return -1;
    }else if(v1>v2){
        return 1;
    }else{
        return 0;
    }
}
var values2=[10,8,19,20,3];
values2.sort(compare);
alert(values2);

//简化compare()函数
function compare(v1,v2){
    //return v1-v2;//升序
    return v2-v1;//逆序
}
var values3=[10,8,19,20,3];
values3.sort(compare);
alert(values3);

 

//===concat()===不影响原数组的值
var colors = [1,2,3,4];
var colors2 = colors.concat("yellow",1 ,2,[3,5]);
alert(colors.join("-")); //1-2-3-4 ;colors没有变化alert(colors2); //1,2,3,4,yellow,1,2,3,5

//===slice()====不影响原数组的值 var colors3 = colors.slice(1);//2,3,4 var colors4 = colors.slice(1,3);//2,3 var colors5 = colors.slice(-1); //4 ;取出最后一个元素 alert(colors3); alert(colors4); alert(colors5);
//===splice()方法
var arrays=["hello","ok","you",3,4,5,6];
//1.删除操作:splice(第一项的位置,要删除的项数)
var removed = arrays.splice(1,2);//删除ok 和 you
alert(arrays); //hello,3,4,5,6
alert(removed); //ok,you

//2.插入操作:splice(起始位置,0,要插入项)
removed = arrays.splice(2,0,"yoyo","good");
alert(arrays);//hello,3,yoyo,good,4,5,6
alert(removed instanceof Array); //返回的是空数组

//3.替换操作:splice(起始位置,要删除项,要插入项)
removed = arrays.splice(1,1,"come","on");
alert(arrays.join(' '));// hello come on yoyo good 4 5 6
alert(removed); //3

 

//===indexOf()与lastIndexOf()==
//这两个方法都返回要查找的项在数组中的位置,没有找到的情况下返回-1
var numbers = ["hello",2,3,"yoyo",47,55,61,17,18,59];
alert(numbers.indexOf("yoyo")); //3; 正向查找
alert(numbers.lastIndexOf(18)); //8;从后往前查找
alert(numbers.indexOf("Good")); //-1

 

    var person = {name:"Nicolas"}; 
    var person1 = {name:"Yoyo"};
    var people = [{name:"Nicolas"}];
    var morePeople = [person1,person];
    //alert(person instanceof Object); //true; person是一个对象
    //alert(people instanceof Array); //true;  people是一个数组
    //alert(morePeople instanceof Array); //true;morePeople是一个数组
    //alert(people.indexOf(person)); //-1
    alert(morePeople.indexOf(person)); //1

数组的5个迭代方法:

//function(item,index,array)三个参数 array[index]=item
//1.every()
var numbers = [1,2,3,4,5,6];
var everyResult = numbers.every(function(item,index,array){
    return (item>2);
});
//alert(everyResult); //false;不是数组中的每一项都大于2

//2.map()操作数组中的每一项,最终返回一个数组
var mapResult = numbers.map(function(item,index,array){
    if(item<4){
        //alert(array[index]); //会打印出当前数组中该索引对应的值
        return item*2;
    }else{
        return item;
    }
});
//alert(mapResult); //2,4,6,4,5,6;

//3.filter()按照指定条件过滤数组中的选项
var filterResult = numbers.filter(function(item){
    if(item%2==0){
        return item;
    }
});
//alert(filterResult); //2,4,6

//4.some()只要数组中的选项有一个满足条件,就返回True,否则返回false
var someResult = numbers.some(function(item,index,array){
    return (item==4);
});
//alert(someResult); //true

//5.foreach()该方法没有返回值,本质上与使用for循环迭代数组一样
var count=0;
numbers.forEach(function(item,index,array){
    count++;
});
//alert(count);
    //ECMAScript5有两个所辖数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组的所有想,然后构建一个最终返回的值。
    //reduce()从数组的第一项开始,逐个遍历到最后.
    //reduceRight()则从数组的最后一项开始,向前遍历到第一项.
    //function(prev,cur,index,array)四个参数:前一个值、当前值、项的索引和数组对象。函数返回的任何值都会作为第一个参数自动传给下一项。
    var  values = [1,2,3,4,5];
    var sum = values.reduce(function(prev,cur,index,array){
        return prev+cur;
    });
    alert(sum);
//==Date==
var start = Date.now();
//alert(start); //输出从1970年1月1日零时开始的毫秒数

var someDate = new Date(Date.parse("May 25,2014"));
//alert(someDate);
var someDate2 = new Date(2015,4,25,15,55,55);
//alert(someDate2.toLocaleDateString()); //2015年5月25日; 月份是基于0的
//alert(someDate2.toLocaleTimeString());    //13:55:55 ;显示时分秒
//alert(someDate2.getDate()); //25 ;得到天数
//alert(someDate2.getDay()); //返回日期中星期的星期几
//alert(someDate2.getFullYear()); //返回4位数的年份

 

posted @ 2014-09-04 13:14  Immanuely  阅读(217)  评论(0编辑  收藏  举报