关于javascript的undefined和null的一些思考
来源:互联网 发布:台湾人用淘宝吗 编辑:程序博客网 时间:2024/06/05 21:57
在javascript中,调用函数时,会开启一个上下文,在上下文初始化的时候,会按照顺序执行三个步骤:
1、函数参数:按照参数的顺序传入参数,如果没有传入的参数会被定义为undefined;
2、函数声明:如果发生命名冲突(主要是与参数命名冲突),会覆盖;
3、变量声明:初始化变量的值为undefined,如果发生命名冲突,会忽略。
function func(a,b) { console.log(a);/*变量a为传入的值,10*/ var a;/*变量a声明,在函数上下文初始化的时候,变量声明冲突时会忽略,否则会初始化为undefined*/ console.log(a); console.log(b); var b = 10; console.log(b); } func(1,2); var b = {};console.log(''); console.log('b',b);/*Object {}*/ console.log('b == null',b == null);/*false*/ console.log('undefined == null',undefined == null);/*true*/ console.log(''); console.log('b.a',b.a);/*undefined*/ console.log(''); console.log('typeof b.a',typeof b.a);/*undefined*/ console.log("'a' in b'",'a' in b);/*false*/ console.log('b.a == undefined',b.a == undefined);/*true*/ console.log('b.a == null',b.a == null);/*true*/ console.log('b.a === undefined',b.a === undefined);/*true*/ console.log('b.a === null',b.a === null);/*true*/ b.a = null;console.log(''); console.log('typeof b.a',typeof b.a);/*object*/ console.log("'a' in b",'a' in b);/*true*/ console.log('b.a == undefine',b.a == undefined);/*true*/ console.log('b.a == null',b.a == null);/*true*/ console.log('b.a === undefined',b.a === undefined);/*true*/ console.log('b.a === null',b.a === null);/*true*/ console.log(''); console.log('x',x);/*undefined:变量声明会被前置,而且赋值为undefined*/ console.log('x == undefined',x == undefined);/*true*/ console.log("'x' in window",'x' in window);/*true,变量声明会被前置,函数外声明的变量会被视为全局变量,全局变量会保存在全局上下文中,全局上下文指向window对象,所以window对象中存在x属性*/ var x = 10;console.log(''); console.log('x',x);/*10*/ console.log('window.k == null',window.k == null);/*true*/ console.log('window.k == undefined',window.k == undefined);/*true*/ console.log('window.k == k',window.k == k);/*Uncaught ReferenceError: k is not defined:后面这个k报错*/执行结果:
当一个对象的属性为undefined时,有可能是这个对象的属性根本不存在(判断对象属性是否存在可以通过'x' in obj判断),有可能是这个对象属性的值为undefined,有可能是这个对象的属性为null,要区别是undefined还是null需要使用严格等于或者严格不等于。
目前令我疑惑的是,理论上全局变量都会保存在全局上下文中,而全局上下文是window,当一个全局变量咩有定义时(代码中的k),调用window.k为undefined,
调用window.k == k会直接报错后面的k没有定义,但是如果声明了全局变量k(需要赋值,可以是null或者undefined),window.k == k就是true,这令我十分费解,希望有知道的同学麻烦告知一下,我会在知道原因之后第一时间更新。
阅读全文
0 0
- 关于javascript的undefined和null的一些思考
- javascript的null和undefined
- javaScript的null和undefined
- javascript 的null和undefined
- 【JavaScript】中关于null和undefined的研究
- javascript的undefined和null的区别
- JavaScript的null和undefined的区别
- JavaScript 中 null 和 undefined 的区别
- JavaScript中的null和undefined的区别
- JavaScript的null和undefined区别
- JavaScript Null和Undefined的区别
- JavaScript Null和Undefined的区别
- JavaScript中null和undefined的区别
- javascript中undefined和null的区别
- JavaScript中null和undefined的理解
- javascript中undefined和null的比较
- JavaScript中null和undefined的区别
- Javascript中null和undefined的区别
- 如何判断hadoop包tar.gz64位还是32位
- kong API gateway(五):upstreams&targets
- thinkPHP使用view()导入模版报错mkdir(): Permission denied
- Leetcode#100: SameTree
- 【算法——Python实现】有权图求最小生成树Prim算法
- 关于javascript的undefined和null的一些思考
- [LeetCode]101. Symmetric Tree
- C#委托Action、Action<T>、Func<T>、Predicate<T>
- 重写Listview中子View显示不全的问题
- DES、AES加密
- MYSQL手把手教你安装和配置OGG,并实现单向DML复制技术
- oracle 5种b*树索引扫描方式
- 安卓取图片(一)进入相机
- activiti-explorer与cas结合实现伪单点登录