javascript 陷阱集
考作用域
|
|
|
|
考声明提前
|
|
考 this
|
|
制造干扰因素的版本
|
|
分号陷阱
|
|
小数相加
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
删除canvas里的宽高,宽:400;高:300;写在style里的效果:
|
|
|
|
|
|
background需要加入 display: inline-block;
|
|
需要加入 box-sizing: border-box;
|
|
需要添加 font-size: 0px;
|
|
需要添加 透明度
需要在div里添加
|
|
|
|
|
|
首先 img 元素默认对齐方式为 vertical-align: baseline;,这就导致了,baseline 以下的部分被空了出来,显示了背景的白色。
问题找到了,对症下药可得出下面的解决方案:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
transform
属性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
伪类列表
|
|
隐藏、显示、切换,滑动,淡入淡出,以及动画
|
|
|
|
|
|
|
|
提示:
|
|
使用队列功能
|
|
|
|
|
|
错误示范:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
设置或返回被选元素的一个或多个样式属性。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可以把 jQuery 选择器添加到 URL 参数
|
|
|
|
POST - 向指定的资源提交要处理的数据
$.get()
|
|
|
|
使用 $.post() 连同请求一起发送数据
这个 ASP 文件 (“demo_test_post.asp”) 类似这样:
通过全名替代简写的方式来使用 jQuery
noConflict() 可返回对 jQuery 的引用,您可以把它存入变量
把 $ 符号作为变量传递给 ready 方法。这样就可以在函数内使用 $ 符号了 - 而在函数外,依旧不得不使用 “jQuery”
|
|
|
|
|
|
|
|
|
|
|
|
|
|
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords
|
|
|
|
|
|
对象字面量(object literal), JSON 格式的核心语法(优先选择)
|
|
对象的属性可以通过链式(chain)表示方法进行访问:
特殊的属性——length(长度)属性
相关用法:
创建数组的传统方法
数组字面量(array literal)法(优先选择)
数组的长度是比数组最大索引值多一的数
访问不存在的数组,返回undefined
遍历数组 forEach():
如果想在数组后追加元素,只需要:
|
|
|
|
|
|
|
|
|
|
|
|
在程序中的任何时候修改原型(prototype)中的一些东西
|
|
可以给 JavaScript 的内置函数原型(prototype)添加东西。让我们给 String 添加一个方法用来返回逆序的字符串:
|
|
定义新方法也可以在字符串字面量上用(string literal)。
嵌套函数:可以访问父函数作用域中的变量
|
|
|
|
|
|
每当 JavaScript 执行一个函数时,都会创建一个作用域对象(scope object),用来保存在这个函数中创建的局部变量。它和被传入函数的变量一起被初始化。这与那些保存的所有全局变量和函数的全局对象(global object)类似,但仍有一些很重要的区别,第一,每次函数被执行的时候,就会创建一个新的,特定的作用域对象;第二,与全局对象(在浏览器里面是当做 window 对象来访问的)不同的是,你不能从 JavaScript 代码中直接访问作用域对象,也没有可以遍历当前的作用域对象里面属性的方法。
所以当调用 makeAdder 时,解释器创建了一个作用域对象,它带有一个属性:a,这个属性被当作参数传入 makeAdder 函数。然后 makeAdder 返回一个新创建的函数。通常 JavaScript 的垃圾回收器会在这时回收 makeAdder 创建的作用域对象,但是返回的函数却保留一个指向那个作用域对象的引用。结果是这个作用域对象不会被垃圾回收器回收,直到指向 makeAdder 返回的那个函数对象的引用计数为零。
##### 闭包(Closure)补充知识
Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。
|
|
另一方面,在函数外部自然无法读取函数内的局部变量。
|
|
|
|
|
|
|
|
解决因闭包而引入的循环引用:
|
|
这段代码创建了一个元素,当它被点击的时候变红,但同时它也会发生内存泄露。为什么?因为对 el 的引用不小心被放在一个匿名内部函数中。这就在 JavaScript 对象(这个内部函数)和本地对象之间(el)创建了一个循环引用。
解决办法1:不要使用e1变量
解决办法2:添加另外一个闭包
|
|
bbb把aaa对象的say方法引用过来,引用的是一个方法而非一个对象,而aaa.say存储的是一个匿名函数,所以这种写法和以下代码并没有什么区别。
|
|
|
|
原来三行的输出会是什么?
答案:3个罗恩。
也就是说,三次this,指代的都是window对象。
稍微改写一下这个方法:
输出就又正常了。
构造器:
extends 关键字可以用在类声明或者类表达式中来创建一个继承了某个类的子类。
同样也可以用于原有的原型继承的“类”:
super 关键字可以用来调用其父类的构造器或者类方法
|
|
但如果事先定义一个变量,例如
|
|
然后就会报错,说item为null。
如果去掉引号就好了。。
即:
不加引号,这个itemid就是变量,加上引号,这就是字符串常量。电脑就去找ID为ItemId的元素。自然是null
|
|
|
|
|
|
|
|
|
|
|
|
|
|