JavaScript

Posted 小南瓜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript相关的知识,希望对你有一定的参考价值。

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"]与前面结果相同
            }

以上是关于JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

30秒就能看懂的JavaScript 代码片段

常用Javascript代码片段集锦

48个值得掌握的JavaScript代码片段(上)

如何将此 JavaScript 代码片段翻译成 Parenscript?

javascript 代码片段

javascript JS-常用代码片段