关于js的一点总结:
首先来看一个场景:
<script>
alert(key) //发现会报错
</script>
因为还没有去声明这个变量,就去使用了,结果就会报错
如何想让它不报错可以使用下面的方法:
if("undefined" == typeof key)alert("发生错误"); //此处会弹出 发生错误
在JavaScript中typeof和instanceof常用来判断一个变量是否为空,或者是什么类型。
顺便学习总结一下typeof、和instanceof的用法:
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。
可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){alert("ok")},
而不要去使用if(a)因为如果a不存在(未声明)则会出错.
对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性.
instanceof 用于判断一个变量是否某个对象的实例:
var a=new Array();
alert(a instanceof Array) //true
alert(a instanceof Object) //true;
这是因为Array是object的子类。
function test(){};
var a=new test();
alert(a instanceof test) //true
<script>
var key;
alert(key) //这里输出 undefined
</script>
在计算机程序中,经常会声明无值的变量,未使用值来声明的变量,其值实际上是 undefined。
同时如何重新申明js变量,该变量的值不会丢失。
eg:
<script>
var name="zhangsan";
var name;
alert(name);//此处依然会输出 zhangsan
</script>
但是对于这个就有些疑惑了:
<script>
alert(key); //undefined
var key=zhangsan;
alert(key); //zhangsan
</script>
按照我的理解第一个alert的结果应该是要报错的,但它却输出了undefined?通过查越资料得知:
javascript在执行前会进行类似“预编译”的操作,首先会创建一个当前执行环境下的活动对象,并将那些用var声明的变量设置为活动对象的属性,并赋值为undefined;
执行阶段,javascript是按照代码的先后顺序进行执行的,当遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时,则会从 prototype链中查找,否则将会按照作用域链查找。遇到var key = zhangsan;这样的类赋值语句时会给相应的变量进行赋值(注意:变量的赋值是在执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
另一个场景:
<script>
window.key=23;
alert(window.key)//此处的结果是23
</script>
<script>
window.key;
alert(window.key)//此处的结果是undefined ,运行时会在window中查找key,会发现未定义
</script>
同时我们也可以通过下面的方法判断,alert(window.key)与定义的window.key没关系(解释的不太清楚)?
<script>
window.key
alert('key' in window) //false
window.aa=23
alert("aa" in window) //true
</script>
首先来看一个场景:
<script>
alert(key) //发现会报错
</script>
因为还没有去声明这个变量,就去使用了,结果就会报错
如何想让它不报错可以使用下面的方法:
if("undefined" == typeof key)alert("发生错误"); //此处会弹出 发生错误
在JavaScript中typeof和instanceof常用来判断一个变量是否为空,或者是什么类型。
顺便学习总结一下typeof、和instanceof的用法:
typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。,typeof一般只能返回如下几个结果:number,boolean,string,function,object,undefined。
可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){alert("ok")},
而不要去使用if(a)因为如果a不存在(未声明)则会出错.
对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性.
instanceof 用于判断一个变量是否某个对象的实例:
var a=new Array();
alert(a instanceof Array) //true
alert(a instanceof Object) //true;
这是因为Array是object的子类。
function test(){};
var a=new test();
alert(a instanceof test) //true
<script>
var key;
alert(key) //这里输出 undefined
</script>
在计算机程序中,经常会声明无值的变量,未使用值来声明的变量,其值实际上是 undefined。
同时如何重新申明js变量,该变量的值不会丢失。
eg:
<script>
var name="zhangsan";
var name;
alert(name);//此处依然会输出 zhangsan
</script>
但是对于这个就有些疑惑了:
<script>
alert(key); //undefined
var key=zhangsan;
alert(key); //zhangsan
</script>
按照我的理解第一个alert的结果应该是要报错的,但它却输出了undefined?通过查越资料得知:
javascript在执行前会进行类似“预编译”的操作,首先会创建一个当前执行环境下的活动对象,并将那些用var声明的变量设置为活动对象的属性,并赋值为undefined;
执行阶段,javascript是按照代码的先后顺序进行执行的,当遇到变量需要解析时,会首先从当前执行环境的活动对象中查找,如果没有找到而且该执行环境的拥有者有prototype属性时,则会从 prototype链中查找,否则将会按照作用域链查找。遇到var key = zhangsan;这样的类赋值语句时会给相应的变量进行赋值(注意:变量的赋值是在执行阶段完成的,如果在这之前使用变量,它的值会是undefined)
另一个场景:
<script>
window.key=23;
alert(window.key)//此处的结果是23
</script>
<script>
window.key;
alert(window.key)//此处的结果是undefined ,运行时会在window中查找key,会发现未定义
</script>
同时我们也可以通过下面的方法判断,alert(window.key)与定义的window.key没关系(解释的不太清楚)?
<script>
window.key
alert('key' in window) //false
window.aa=23
alert("aa" in window) //true
</script>