一些小知识点收集(杂)
Split切割字符串
//split切割字符串的时候是先切割成数组再赋值,所以在赋值的时候可以用索引指定需要的值
var a = "1,2,3,4,5";
var b = a.split(",")[1];
alert(b); //返回2
iframe里的js要操作父级窗口的dom,必须搞懂几个对象:
parent是父窗口(如果窗口是顶级窗口,那么parent==self==top),
top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),
self是当前窗口(等价window),
opener是用open方法打开当前窗口的那个窗口;
这样iframe里的js要操作父级窗口的dom可以通过parent,top这些对象来获取父窗口的window对象,例如:
parent.document.getElementById(“dom ID”);
parent,top还能调用父级窗口的的js方法,比如,getIFrameDOM(iID)是父级窗口的一个方法,那么iframe里可以使用parent.getIFrameDOM(“wIframeA”)来调用父级窗口的getIFrameDOM(iID)方法;
even.returnValue
even.returnValue = false; 和return false的区别:
//可以控制是否回调,ture 回调false不回调
//event.returnValue = confirm("是否继续弹出选择房产窗口?");
//可以做判断语句
前者是取消事件的处理,而后者则是返回了一个false值
大家应该对javascript中事件的冒泡有所了解吧,如果只是简单地返回false值,并不会终止其触发元素的父级元素继续触发相同事件,而使用前者,则就地正法,方法也就在此停止了,以免后患无穷。
event.srcElement
设置或获取触发事件的对象。
引用对象,这个对象有什么属性,就可以使用。
常用的有:
event.srcElement.TagName //事件对象的html标记
event.srcElement.innerText //事件对象的内文本
event.srcElement.value //表单事件对象的值
JavaScript中的陷阱集合
函数和操作符
双等号(==)操作符在比较时会进行强制类型转换,这意味着它可以比较两个不同的类型的对象,在执行比较值钱它将会尝试把这两个对象转换成同一类型。如:
"1" == 1 //true – 字符串”1”会被强制转会为数字1. "" == 0 //true - 空字符串会被强制转换为数字0. 0 == "0" //true - 数字0会被强制转换成字符串"0"
parseInt不把10作为数字基数
如果忽略parseInt的第二个参数,那么数字的基数将由下面的规则决定.
- 默认基数为10,即按10进制解析
- 如果数字以0x开头,那么基数为16,即按16进制解析
- 如果数字以0开头,那么基数为8,即按8进制解析
如常见错误:
parseInt("8"); //8
parseInt("08"); //0
字符串替换
字符串替换只能替换第一个匹配项,并不能替换所有的匹配项.如下所示:
"bob".replace("b", "x"); // "xob"
"bob".replace(/b/, "x"); // "xob" (使用了正则表达式)
如果要替换所有的匹配项,我们可以使用正则表达式,并为他们添加全局修饰符,如下所示:
"bob".replace(/b/g, "x"); // "xox" 加上 /g表示匹配所有项 "bob".replace(new RegExp("b", "g"), "x"); // "xox" (alternate explicit RegExp)
“+"操作符会执行相加操作和字符串连接操作
当操作数是字符串的时候”a+b“通常是执行连接操作,如果想执行相加操作必须先转将其转换为数字 如: Parseint(),Number() 等..
需要注意的是相减操作会尝试将操作数转换为数字类型,如: "3" - "1"; // 2
数据不存在:”null“和”undefined“
有两种对象状态来表明数据不存在:null和undefined。如:
var a; a === null; //false a === undefined; //true
另外:如果var a=null; 那么a==undefined; 会返回true,所以尽量避免使用(==)判断相等
”a“实际上是undefined的(尽管用双等号==来与null比较会得出true的结果,但这只是表面上看起来正确的另一个错误)。
如果想检查一个变量是否真的存在值,那么不能用双等号==去判断,要用下面的方法:
if(a !== null && a !== undefined) { ... }
既然null和undefined都是false,那么你可以这样去做:
if(a) { ... }
0是false,空字符串也是。那么如果这其中一个是a的正确的值的话,就要用前者了。那种比较短小的比较方式,适合于比较objects, arrays, 和booleans类型。
innerHTML、innerText:、outerHTML的用法
<div id="test"> <span style="color:red">test1</span> test2 </div>
在JS中可以使用:
test.innerHTML:
也就是从对象的起始位置到终止位置的全部内容,包括Html标签。
上例中的test.innerHTML的值也就是“<span style="color:red">test1</span> test2
”。
test.innerText:
从起始位置到终止位置的内容, 但它去除Html标签
上例中的text.innerTest的值也就是“test1 test2”, 其中span标签去除了。
test.outerHTML:
除了包含innerHTML的全部内容外, 还包含对象标签本身。
上例中的text.outerHTML的值也就是<div id="test"><span style="color:red">test1</span> test2</div>
JavaScript中链式作用域
function f1(){ n=999; function f2(){ alert(n); // 999 } }
在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1 就是不可见的。这就是Javascript语言特有的“链式作用域”结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。
JavaScript中闭包的概念及用途
上一节代码中的f2函数,就是闭包。我的理解是,闭包就是能够读取其他函数内部变量的函数。在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
function a() { var i = 0; function b() {
alert(++i);
} return b; } var c = a(); c();
因为: 当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.
相关文章连接: http://www.cnblogs.com/uedt/archive/2010/10/28/1863389.html
关键字 this的功能
关键字 this 总是指向调用该方法的对象,
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //输出 "red"
在上面的代码中,关键字 this 用在对象的 showColor() 方法中。在此环境中,this 等于 oCar。
使用this关键字的原因
因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数 理解下面的例子
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //输出 "red" oCar2.showColor(); //输出 "blue"
关于this关键字的一个小小的思考题,能帮助我们更好的理解this
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window
下面隐藏代码里有我的理解,不确定是正确的,只是记录一下吧。
/*这里的Object是一个已经实例化好了的对象,由于不是new出来的所以this的指向不会是object本身,而是window。所以object里面的name : "My Object"实际上在此次alert()下是没有起到任何作用的,也就是说即使删掉也不会影响执行过程。如果显示的return Object.name;那么返回的值就是"My Object"。或者把object写成一个函数 如:*/
var name = "The Window";
var object = function() {
name = "My Object";
this.getNameFunc = function() {
return function() {
return this.name;
};
}
}
var aa = new object();
alert(aa.getNameFunc()());
//再new它的实例,这个时候this.name返回的就是“My Object”了。
>>>未完待续<<<
浙公网安备 33010602011771号