日期:2014-05-16  浏览次数:20511 次

JS学习笔记_基础篇_2
var add = function(num, num2, num3) {
				alert(num + num2 + num3);
			}
			
			//add   指向函数对象的引用.  add.lenth:期望接收的参数个数.  arguments.length:实际接收的参数个数
			alert(add.length);
			add(1, 2, 3);
			
			
			//此时希望接收参数个数为0
			var add2 = function() {
			
			}
			
			alert(add2.length);

//逻辑表达式不返回null,Undefined  就为真,if(4) if(aaa) 都为真
  var s = false;

  alert(s);

  var s = "hello"; // s是原始类型(String),也可以使用单引号定义

  alert(typeof s);//typeof:一元运算符以,用于获取变量的数据类型
  //其返回值有5个:undefined、boolean、number、string以及object(全部小写)

  var s = new String("hello"); //s是对象类型(Object),js所有的对象都是Object继承下来的

  alert(typeof s);

  var s = false;

  alert(typeof s);

  var s = 3;

  alert(typeof s);

  
  function add()
  {
	return 3;
	//return;
  }
 
  alert(add());//如果没有显式返回值(或就一个return) 则返回undefined

  alert(typeof ss);//未定义的变量  此时 打印:undefined

  alert(undefined == null);//为ture,undefined从null派生出来的

  var s = Number(3);

  alert(s);//打印数字3

  var s = Boolean("hello");

  alert(s);//打印为ture,非null,Undefined就为ture

  var s = new String("hello");

  alert(typeof s);//为Object
  
   var s = String("hello");

  alert(typeof s);//为String : 表示强转

  
  var s = new Boolean("hello");

  alert(s);//true;
  alert(typeof s);//为object
  
 // var object = new Object();//所有的类都是从Object继承的,生成Object实例的方法


  var object = new Object();

  for(var v in object)
  {
	alert(v);//in  遍历类中的属性,但是对于Object类 这种方法打印不出来(无法枚举出来
	//  能枚举出来的 就可以打印出来                                             
  }

  //alert(object.propertyIsEnumerable("prototype"));//判断某个属性是否可以枚举出来  不可枚举  打印结果为false



  //for  in  枚举 window 对象的属性, window 是个内置对象,不用new 直接用就可以了
  //window 对象 可枚举属性
  for(var v in window)
  {
	//alert(v);
  }


	alert("window");

  var object = new Object();
  
  //alert(object.username);
  object.username = "guojie";//添加属性的两种方式, 动态语言:对象生成后还可以添加属性
  object["username"] = "shengsiyuan";
  alert(object.username);
  delete object.username; // username属性已经从object对象中删除
  alert(object.username);//undefined


  // 在JavaScript中定义对象的最常见的方式
  //多对属性之间用逗号隔开
  var object = {username: "zhangsan", password: 123};
  alert(object.username);
  alert(object.password);

// array 指向 new 出来的 那个对象的引用
//  可扩容(与Java不同)
var array = new Array();

array.push(1);
array.push(2);
array.push(3);

alert(array.length);

//定义数组的第二种方式,常用
var array = [1, 3, 25];
//对原数组排序.
array.sort();//升序  1 , 25 , 3  并不是按照大小排序的, 调用toString 然后比较

alert(array);

//编写自己的排序方法
function compare(num1, num2)
{
	var temp1 = parseInt(num1);
	var temp2 = parseInt(num2);

	if(temp1 < temp2)
	{
		return -1;//无需交换
	}
	else if(temp1 == temp2)
	{
		return 0;
	}
	else
	{
		return 1;//交换顺序
	}
}

var array = [1, 3, 25];

array.sort(compare); 

alert(array);

var array = [1, 3, 25];

// 匿名函数  相当于Java中的匿名类
array.sort(function(num1, num2)
{
	var temp1 = parseInt(num1);
	var temp2 = parseInt(num2);

	if(temp1 < temp2)
	{
		return -1;
	}
	else if(temp1 == temp2)
	{
		return 0;
	}
	else
	{
		return 1;
	}
}
);

alert(array);

//此种方式弊端:再要一个对象 则 属性都要写一遍
				var object = new Object();
				//添加属性 name
				object.name = "zhangsan";
				//添加一个方法. 动态语言,可以先生成对象  再 生成属性
				object.sayName = function(name) {
					this.name = name;
					alert(this.name);
				}
				
				object.sayName("lisi");

//工厂方式创建对象
//工厂方法. 调用此工厂方法 就能创建对象
function createObject()
{
	var object = new Object();

	object.username = "zhangsan";
	object.password = "123";

	object.get = function()
	{
		alert(this.username + ", " + this.password);
	}

	return object;
}

var object1 = createObject();
var object2 = createObject();

object1.get();//会被下面的覆盖掉,打印出来为未定义


//调用的时候可以传参
function createObject(username, password)
{
	var object = new Object();

	object.username = username;
	object.password = password;

	object.get = function()
	{
		alert(this.username + ", " + this.password);
	}

	return object;
}

var object1 = c