一些小知识点收集(杂)

  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类型。

 

         innerHTMLinnerText: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”了。

 

            >>>未完待续<<<

 

 

 

posted on 2012-06-20 16:44  Fighting_1024  阅读(138)  评论(0)    收藏  举报