js容易被忽视的问题

一、作用域和全局变量


var test=function(){
var a=1;
setTimeout(function(){
console.log(a);
a=2;
},1000);
a=3;
setTimeout(function(){
console.log(a);
a=4;
},2000);

};
test();

结果是3,2;

共享内存。setTimeout等异步,是取现在当时的a的值。执行第一个setTimeout的时候,a=3,已经执行了。

二、全局变量和new变成全局的


var foo=10;
var a=1;
var main = function (){
//a=10;
console.log(a);
a=20;
console.log(this.foo);
this.foo=foo;
console.log(this.foo);
foo=1000;
console.log("111111111111");
}
var s=main();
var d=new main();

1

10

10

111111111111

20

undefined

1000

111111111111

不加new 都是全局的,this指向的全局变量。所以第一个就取得是全局的值。

第二个加new 了,this.foo指向的是自己,没有定义于是就报undefined。外面a
foo等是全局变量,main(),执行后,a已经变成20了,foo也变成1000了,所以值发生变化了,因为全局变量。


var foo=10;
var a=1;
var main = function (){
//a=10;
console.log(a);
a=20;
console.log(this.foo);
this.foo=foo;
console.log(this.foo);
foo=1000;
console.log("111111111111");
}
//var s=main();
var d=new main();

如果不执行第一个,结果发生变化。可以发现其实是全局变量的修改。

1

undefined

10

111111111111

三、快速的判断Array类型


 var toString = Object.prototype.toString;
var isArray = Array.isArray || function(val) {
return toString.call(val) === ‘[object Array]‘;
};

function isString(val) {
return toString.call(val) === ‘[object String]‘;
}

function isFunction(val) {
return toString.call(val) === ‘[object Function]‘;
}

四、attribute和Property的区别

attribute

input节点有很多属性(attribute):‘type’,‘id‘,‘value‘,‘class‘以及自定义属性,在DOM中有setAttribute()和getAttribute()读写DOM树节点的属性(attribute)

PS:在这里的getAttribute方法有一个潜规则,部分属性(input的value和checked)通过getAttribut取到的是初始值,这个就很好的解释了之前的n1为1。

Property

javascript获取到的DOM节点对象,比如a
你可以将他看作为一个基本的js对象,这个对象包括很多属性(property),比如“value”,“className”以及一些方法,setAttribute,getAttribute,onclick等,值得注意的是对象的value的属性(property)取值是跟着输入框内的当前值一起更新的,这解释了之前的n2为什么为1000了。

五、关于hasOwnPropery

时间: 2024-10-05 12:53:26

js容易被忽视的问题的相关文章

nodemon详解

1.介绍 Nodemon是一个使用工具,它将会见监视源文件中任何的更改并自动重启服务器.Nodemon不会对你的代码产生额外的更改,它只是node命令的替代品.因为当你修改源文件后,如果你用的是原来的node 则必须手动重启 你的更改才会有效.但是如果用的是nodemon,则你不需要手动操作,它会检测你的代码改动自动重启. 2.安装: npm install -g nodemon 3.使用: 使用nodemon跟原来的node没什么不同 nodemon index.js 4.Config fil

关于js 对象 容易被忽视的排序问题

在js中 object 笼统的理解可以是 key 和 value的对应集合. 比如  {key1 : value1,key2 : value2} 而数组是索引(index) 和数值的集合,如[a1,b1,c1] ,索引 0,1,2对应的数值分别是a1,b1,c1 我们知道在js中 数组是对象中的一种特殊形式,上面的列子也大概能够反映出数组和对象的一些关系和区别. 接下来就谈一谈数组和对象之间容易被我们忽视的排序问题. var object1 = {'2':'b','3':'c','1':'a'}

js中容易被忽视的事件问题总结

一:跨平台事件 什么叫跨平台事件?即在不同的浏览器上执行同一事件,所使用的方法不同. 什么是EventUtil对象?有什么作用?即将所有与事件相关的函数,融合在一起的一个容器,方便管理事件对象,它没有属性.主要处理DOM事件和IE事件的磨合,使其尽可能的相似. 下面我们来看一下DOM和IE之间的对象属性和方法做个对比(这里只指出两者之间不同的属性和方法),主要有以下五大点: DOM属性和方法 IE属性和方法 charcode keycode preventDefault returnValue=

用js刷题的一些坑

leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也是引用对象,这点常常被忽视,所以在递归的时候传递数组要用arr.slice(0)这样复制一个一样的新数组,不然会出现你传入的数组会被同级的递归改变,结果就不对了. 所以只要数组复制的地方最好都要这么写,除非你真的想引用.而且注意是slice不是splice这两个方法差别很大,你如果用splice(0

Node.js v0.12.0API手册--文件系统

File System Stability: 3 - Stable 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集.您可以通过调用require('fs')来获取该模块.文件系统模块中的所有方法均有异步和同步版本. 文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参. 回调函数的构成由您调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息. 如果异步操作执行正确并返回,该错误形参则为 null或者undefined. 如果您使用的是同步版

js中三目运算符和&& || 符的个人浅见

这两天看到别人写的代码,感觉很牛逼,如下,大神请忽视 $(".lgn").on("click", function() { var a = {}; a.loginType = $(this).data("logintype"); a.loginType == wx_utils.LOGIN_TYPE.WX ? (a.username = $("#username").val(), a.password = $("#pa

JS正则表达式完整教程(略长)

JS正则表达式完整教程(略长) 引言 亲爱的读者朋友,如果你点开了这篇文章,说明你对正则很感兴趣. 想必你也了解正则的重要性,在我看来正则表达式是衡量程序员水平的一个侧面标准. 关于正则表达式的教程,网上也有很多,相信你也看了一些. 与之不同的是,本文的目的是希望所有认真读完的童鞋们,都有实质性的提高. 本文内容共有七章,用JavaScript语言完整地讨论了正则表达式的方方面面. 如果觉得文章某块儿没有说明白清楚,欢迎留言,能力范围之内,老姚必做详细解答. 具体章节如下: 引言 第一章 正则表

Vue.js——60分钟组件快速入门(上篇)

组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML元素,封装可重用的HTML代码,我们可以将组件看作自定义的HTML元素. 本文的Demo和源代码已放到GitHub,如果您觉得本篇内容不错,请点个赞,或在GitHub上加个星星!(所有示例都放在GitHub Pages上了,请访问https://github.com/keepfool/vue-tut

Node.js v0.10.31API手册-Domain

Node.js v0.10.31API手册-目录 Domain(域) Domains 提供了一种方式,即以一个单一的组的形式来处理多个不同的IO操作.如果任何一个注册到domain的事件触发器或回调触发了一个'error'事件,或者抛出一个错误,那么domain对象将会被通知到.而不是直接让这个错误的上下文从`process.on('uncaughtException')'处理程序中丢失掉,也不会致使程序因为这个错误伴随着错误码立即退出. 警告: 不要忽视错误! Domain error处理程序