Date
date.toString() 获取世界时间,会提示当前时区
var data = new Date(); alert(date.toString());
date.toLocaleString() 获取当前时区的当前时间
超链接不跳转
一、让js函数返回false,在click也返回false
function hi(){ alert("你好") ; return false; } <a href="http://www.baidu.com" onclick="return hi();">打招呼</a>
二、将href指定成一段脚本
<a href="javascript:hi();">打招呼</a>
数据类型
boolean 布尔
number 数字
string 字符串
Undefined 未定义
Null 空对象
Object 对象类型
Undefined类型、Null类型都是只有一个值的数据类型,值分别为undefined与null
null是一个object的值
查看变量的类型typeof 变量名或typeof(变量名),返回变量类型的字符串
//返回的是function alert(typeof(date)) //返回的是string alert(typeof(date()))//调用方法返回字符串
类型转换:类型名(变量名)或parse***(变量名)
//当变量被声明后,没有初始化,值为undefined
判等
双等号==判断值是否相等
三等号===先判断类型是否相同,再判断值是否相等
undefined==null true
undefined===null false
123==“123” true
123===“123” false
如何判断变量是否可用?
先判断类型是否为undefined,再判断值是否为null,否则可用
isNan() 非数字判断
alert(isNaN('123')) //false 能转成数字的都是false alert(isNaN('abc'))
eval() 将一段字符串当做js代码执行
应用场景:当从文本框中获取值时,得到的是字符串,希望那段字符串当做js执行,则使用eval()
eval('alert("abc")')
方法
使用关键字arguments获取所以的参数,是一个数组
//可变参数 function sum(){ var res=0; for(var i=0;i<arguments.length;i++) { res+=argument[i]; } } sum(1,2,3,4,5);
js不支持方法重载,如果方法重名,后写的函数会把之前的覆盖掉
匿名函数
一、可以将方法赋值给一个变量,这个变量表示一个方法
var fn = function(a,b){alert(a+b);}; //调用 fn(1,2);
二、定义时完成调用
(function(){})()
三、赋值给一个变量完成调用
new Function("a","b","return a+b");
闭包(主要作用是类的定义)
支持在函数内部调用函数之前声明过的变量
作用域链:变量的作用域在当前函数中,及当前函数内部定义的函数中,形成了一个链条(缺点:会让变量的值在内存中长期存放,无法释放,尽量避免闭包的发生)
//定义一个函数say function say(name){ //返回一个函数 return function(){ //输出name的值 alert("我是"+name) } } //调用say函数,将返回值赋值给fn var fn = say("小明"); //调用fn fn();
window.onload=function(){ var btn = document.getElementsByName("happy"); for(var i=0;i<btn.length;i++){ //逐个为按钮注册点击事件 btn[i].onclick=function(){ //正确写法 //this.value="noHappy"; //错误原因,i的闭包,当调用此方法时,由于该方法没有i,所以去外层方法寻找,但由于当时已经循环完,所以i为7,也就是说,不管点击哪个按钮,执行的都是第8个(也就是i为7)按钮的事件 document.getElementById(i).value="noHappy"; } } }
<input type="button" name="happy" id="0" value="happy"/>
<input type="button" name="happy" id="1" value="happy"/>
<input type="button" name="happy" id="2" value="happy"/>
<input type="button" name="happy" id="3" value="happy"/>
<input type="button" name="happy" id="4" value="happy"/>
<input type="button" name="happy" id="5" value="happy"/>
<input type="button" name="happy" id="6" value="happy"/>
<input type="button" name="happy" id="7" value="happy"/>
模拟面向对象
//第一种方式 //为类增加成员 function Person(gender){ //在类内部声明一个Gender属性,初始化为gender值 this.Gender=gender; this.say=function(){ alert("我是"+this.Gender+"的"); } } //使用构造方法创建对象 var women=new Person("女"); //调用方法 person.say(); alert(typeof(women));//object alert(typeof(Person("女")));//undefined,因为Person作为函数时,没有返回值,所以是undefined alert(typeof(Person));//function,Person就是一个函数,类型是function //第二种方式 //为对象增加属性 function Person(){} var p=new Person(); p.Name="小明";//为对象p新增了一个Name属性 p.say=function(){ alert(p.Name); } p.say(); //新建的对象,是没有Name属性的,因为类Person中没有Name属性 var p1=new Person(); alert(p1.Name)
原型
//原型:对象的类型 function Person(){ this.Age=18; } var p = new Person(); //访问原型,为原型注册数据成员,下面两种结果一样 p.__proto__.Name="小红";//两个下划线 Person.prototype.Name="小紫";
集合
//使用[]定义数组 var arr=[1,'a',"小明"]; arr[0] //键值对{键:值} var arr2={name:"小明",age:18,gender:'男'}; arr2["name"]//将arr2认为是集合,通过键访问值 arr2.name//将arr2任务是json,通过属性访问值 //定义json数组 var temp=[{ name:"小明", age:17 },{ name:"小红", age:18 },{ name:"小紫", age:18 }]; //输出对象的name for(var item in temp){ alert(temp[item].name)//temp[item]["name"]与前面结果相同 }