您的位置:首页 > Web前端 > JavaScript

JavaScript学习笔记(二)

2014-09-04 13:14 344 查看
//===延长作用于链======
// 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


  

//====unshift()与pop()结合反向模拟队列=====
var colors = new Array();
var count = colors.unshift("blue","red");
alert(count); //2
alert(colors);//blue,red
colors.unshift("hello"); //插入到队头
alert(colors); //hello,blue,red
colors.pop();//尾出队
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位数的年份
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: