读书人

JS基础小结

发布时间: 2012-10-06 17:34:01 作者: rapoo

JS基础总结

弱类型语言,在变量声明时不需显式地指定其数据类型,变量的数据类型将根据变量的具体内容推导出来,且根据变量内容的改变而自动更改,而强类型语在变量声明时必须显式地指定其数据类型。

在强类型语言中,变量类型有多种,例如int char float boolean 等
而javascript只有一种类型var ,为变量赋值时会自动判断类型并进行转换,所以javascript是弱语言,就体现在变量定义类型VAR上了。

?

javascript中的全局函数是什么?

全局函数与内置对象的属性或方法不是一个概念。全局函数它不属于任何一个内置对象。JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能:escape( )、eval( )、isFinite( )、isNaN( )、parseFloat( )、parseInt( )、unescape( )。

注意setTimeout不是!

?

1.判断浏览器

if(document.all)判断浏览器是否支持document.all对象。只有IE支持。因此相当于判断浏览器是否是IE

             function doBack(){if(document.all){window.location.href = "backIndex.do";}else{window.location.href = "../backIndex.do";}}
if(document.all){cityname_div = document.getElementById("city_name_div").innerText;}else{cityname_div = document.getElementById("city_name_div").textContent;}
?

2.join:

join() 方法用于把数组中的所有元素放入一个字符串。

元素是通过指定的分隔符进行分隔的。

1.

<script type="text/javascript">var arr = new Array(3)arr[0] = "George"arr[1] = "John"arr[2] = "Thomas"document.write(arr.join("-"))</script>

?George-John-Thomas

?

2.

?

<script type="text/javascript">var arr = new Array(3)arr[0] = "George"arr[1] = "John"arr[2] = "Thomas"document.write(arr.join())</script>

?

George,John,Thomas

当join()不含任何内容时,输出带,

join("")带空格时,以空格间隔

?

split:

split() 方法用于把一个字符串分割成字符串数组。

注释:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

注释:String.split() 执行的操作与 Array.join 执行的操作是相反的。

<script type="text/javascript">


var str="How are you doing today?"

document.write(str.split(" ") + "<br />")
document.write(str.split("") + "<br />")
document.write(str.split(" ",3))
</script>

输出:

How,are,you,doing,today?
H,o,w, ,a,r,e, ,y,o,u, ,d,o,i,n,g, ,t,o,d,a,y,?
How,are,you

?

3.window.open

window.close()

http://www.7880.com/Info/Article-2f4d60.html

?

4.将字符串转换成URL编码?????

?var myString = "hello all";
?var code = encodeURI(myString);???? //结果: "hello%20all"??
?var str = decodeURI(code);????????? //结果: "hello all"??
//相应的还有:? encodeURIComponent()? decodeURIComponent()?

?

5. 截取字符串??

//截取第 6 位开始的字符       var myString = "Every good boy does fine.";       var section = myString.substring(6);    //结果: "good boy does fine."             //截取第 0 位开始至第 10 位为止的字符       var myString = "Every good boy does fine.";       var section = myString.substring(0,10); //结果: "Every good"             //截取从第 11 位到倒数第 6 位为止的字符       var myString = "Every good boy does fine.";       var section = myString.slice(11,-6);    //结果: "boy does"             //从第 6 位开始截取长度为 4 的字符       var myString = "Every good boy does fine.";       var section = myString.substr(6,4);     //结果: "good" 

?string.substr(start,length)

????? start:? 必须

????? length: 可选

<script type="text/javascript">var str="Hello world!";document.write(str.substr(3)+"<br />");document.write(str.substr(3,4));</script> lo world!lo w

?

slice()方法的两个参数如果有负数,就表示是从后往前计算,
?????? slice()的参数可以为负数,所以要比substring()更加灵活,但没那么宽容了,如果 start比end要大,它将返回一个空字符串

substring()方法的两个参数可以颠倒,
?????? 如果有负数的话计算机会被认为是 0,
??????
substr()方法在FireFox下面,如果第一个参数小于0,FireFox会从后往前的计数,IE则会把第一个参数当成0,第二个参数如果小于0,计算机会认为是0。

<script>var p="我爱我家的作者是梁左"document.write(p.slice(-5,-3))document.write(p.substring(-5,2))document.write(p.substr(-7,3))</script>//显示:作者 我爱 家的作
?
var fullString = "Every dog has his day.";    var section = fullString.substring(0, 4); // section is "Ever".    section = fullString.substring(4, 0);     // section is also "Ever".  //substring()参数可以颠倒    section = fullString.substring(1, 1);     // section is an empty string.    section = fullString.substring(-2, 4);    // section is "Ever", same as fullString.substring(0, 4);  
?

?

?

6.日期

 获取时间的某部份        var myDate = new Date();        myDate.getYear();       //获取当前年份(2位)        myDate.getFullYear();   //获取完整的年份(4位,1970-????)        myDate.getMonth();      //获取当前月份(0-11,0代表1月)        myDate.getDate();       //获取当前日(1-31)        myDate.getDay();        //获取当前星期X(0-6,0代表星期天)             计算之前或未来的时间        var myDate = new Date();        myDate.setDate(myDate.getDate() + 10);  //当前时间加10天        //类似的方法都基本相同,以set开头,具体参考第2点  

?7.数字处理

 小数转整数        var f = 1.5;        var i = Math.round(f);  //结果:2 (四舍五入)        var i = Math.ceil(f);   //结果:2 (返回大于f的最小整数)        var i = Math.floor(f);  //结果:1 (返回小于f的最大整数)         格式化显示数字        var i = 3.14159;               //格式化为两位小数的浮点数        var str = i.toFixed(2);     //结果: "3.14"               //格式化为五位数字的浮点数(从左到右五位数字,不够补零)        var str = i.toPrecision(5); //结果: "3.1415"         X进制数字的转换             var i = parseInt("0x1f",16);        var i = parseInt(i,10);        var i = parseInt("11010011",2);         随机数        //返回0-1之间的任意小数        var rnd = Math.random();        //返回0-n之间的任意整数(不包括n)           var rnd = Math.floor(Math.random() * n)    

?8.JS中Map

  function HashMap()    {        /** Map 大小 **/       var size = 0;        /** 对象 **/       var entry = new Object();                /** 存 **/       this.put = function (key , value)        {            if(!this.containsKey(key))            {                size ++ ;            }            entry[key] = value;        }                /** 取 **/       this.get = function (key)        {            return this.containsKey(key) ? entry[key] : null;        }                /** 删除 **/       this.remove = function ( key )        {            if( this.containsKey(key) && ( delete entry[key] ) )            {                size --;            }        }                /** 是否包含 Key **/       this.containsKey = function ( key )        {            return (key in entry);        }                /** 是否包含 Value **/       this.containsValue = function ( value )        {            for(var prop in entry)            {                if(entry[prop] == value)                {                    return true;                }            }            return false;        }                /** 所有 Value **/       this.values = function ()        {            var values = new Array();            for(var prop in entry)            {                values.push(entry[prop]);            }            return values;        }                /** 所有 Key **/       this.keys = function ()        {            var keys = new Array();            for(var prop in entry)            {                keys.push(prop);            }            return keys;        }                /** Map Size **/       this.size = function ()        {            return size;        }                /* 清空 */       this.clear = function ()        {            size = 0;            entry = new Object();        }    }        var map = new HashMap();        /*   map.put("A","1");   map.put("B","2");   map.put("A","5");   map.put("C","3");   map.put("A","4");   */   /*   alert(map.containsKey("XX"));   alert(map.size());   alert(map.get("A"));   alert(map.get("XX"));   map.remove("A");   alert(map.size());   alert(map.get("A"));   */       /** 同时也可以把对象作为 Key **/   /*   var arrayKey = new Array("1","2","3","4");   var arrayValue = new Array("A","B","C","D");   map.put(arrayKey,arrayValue);   var value = map.get(arrayKey);   for(var i = 0 ; i < value.length ; i++)   {       //alert(value[i]);   }   */   /** 把对象做为Key时 ,自动调用了该对象的 toString() 方法 其实最终还是以String对象为Key**/       /** 如果是自定义对象 那自己得重写 toString() 方法 否则 . 就是下面的结果 **/       function MyObject(name)    {        this.name = name;    }        /**   function MyObject(name)   {       this.name = name;              this.toString = function ()       {           return this.name;       }   }   **/   var object1 = new MyObject("小张");    var object2 = new MyObject("小名");        map.put(object1,"小张");    map.put(object2,"小名");    alert(map.get(object1));    alert(map.get(object2));    map.remove("xxxxx");    alert(map.size());        /** 运行结果 小名 小名 size = 1 **/       /** 如果改成复写toString()方法的对象 , 效果就完全不一样了 **/       </script>  

?JS中in

var arr = ["a","b","2","3","str"];var result=false;var result1=false;for(var i in arr){ if("b"==arr[i])   result=true; if(4==arr[i])   result1=true;}document.write(result+"<br>");document.write(result1+"<br>");这样可以判断的
?

?

?

9.常用DOM的API

 document方法:    getElementById(id) Node 返回指定结点的引用    getElementsByTagName(name) NodeList 返回文档中所有匹配的元素的集合    createElement(name) Node Node    createTextNode(text) Node 创建一个纯文本结点    ownerDocument Document 指向这个节点所属的文档    documentElement Node 返回html节点    document.body Node 返回body节点       element方法:    getAttribute(attributeName) String 返回指定属性的值    setAttribute(attributeName,value) String 给属性赋值    removeAttribute(attributeName) String 移除指定属性和它的值    getElementsByTagName(name) NodeList 返回结点内所有匹配的元素的集合       node方法:    appendChild(child) Node 给指定结点添加一个新的子结点    removeChild(child) Node 移除指定结点的子结点    replaceChild(newChild,oldChild) Node 替换指定结点的子结点    insertBefore(newChild,refChild) Node 在同一层级的结点前面插入新结点    hasChildNodes() Boolean 如果结点有子结点则返回true       node属性:    nodeName String 以字符串的格式存放结点的名称    nodeType String 以整型数据格式存放结点的类型    nodeValue String 以可用的格式存放结点的值    parentNode Node 指向结点的父结点的引用    childNodes NodeList 指向子结点的引用的集合    firstChild Node 指向子结点结合中的第一个子结点的引用    lastChild Node 指向子结点结合中的最后一个子结点的引用    previousSibling Node 指向前一个兄弟节点;如果这个节点就是兄弟节点,那么该值为null    nextSibling Node 指向后一个兄弟节点;如果这个节点就是兄弟节点,那么该值为null 

来源:http://www.iteye.com/topic/867588

?

10、Number/parseInt

prompt()函数实际上把用户输入的值返回为字符串类型,如同写成了var myCal = 1+"2" ;

如果使用减法运算符 var myCal = 1- num ;会执行减法操作。


Number(): 把括号里的变量值转换为一个数

parseFloat(): 把括号里的值转换成一个浮点数。从左到右逐个字符地解析字符串,直到遇到一个字符不能用在数字里。然后它会在那个点停止并把这个字符串转换成数字。如果第一个字符就不能再数字里使用,放回NaN(Not a Number);

parseInt(): 把括号里的值转换成一个整数,它不用四舍五入,而是把小数部分直接去掉

?

var num = prompt("Enter a number" , "");typeof(num)parseFloat(num)parseInt(num)num = Number(num)numtypeof(num)

?输入23.50

string23.52323.5number

?输入23.50abc

string23.523NaNnumber

?这次Number()函数返回了NaN,parseFloat()和parseInt()仍然返回一个数字,因为它们是从左到右尽可能多地把字符串转换成数字,当遇到一个非数字时才停止。Number()函数会拒绝任何包含非数字字符的字符串(阿拉伯数字、小数、+和-符号都是允许的,其他的字符则不行)

输入abc

stringNaNNaNNaNnumber

?

?11.动态添加下拉框:

var countrySelect  = document.getElementById('findMarkuplayer1Bean.countryList');for(var i=0; i<countries.content.length; i++) {var opt   = document.createElement("OPTION");   //动态添加下拉框opt.value = countries.content[i].code;opt.text  = countries.content[i].countrynameEn;countrySelect.options.add(opt);   //注意}

?12、For...in

a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}   for (key in a) {      s += a[key];   }
?
for(var d in dataList){      alert("name:"+dataList[d].name);              }

?..

?

javascript本身只支持一维数组,
有时非要用到二维数组的时候,
可以将一维数组的分项又定义为一个数组,
二维数组就是用数组构成的数组

Var aa=new Array(); //定义一维数组??
for(i=1;i<=10;i++)??
{??
??? aa[i]=new Array(); //将每一个子元素又定义为数组??
??? for(n=0;n<=10;n++)??
??? {??
??????? aa[i][n]=i+n; //此时aa[i][n]可以看作是一个二级数组??
??? }??
}

定义数组还可以这样:var arr=[];
定义对象:var objectname={};

?

12.如何实现鼠标点击页面中的任意标签,alert该标签的名称.(注意兼容性)

document.onclick=function(e){  e=e||window.event;  var o=e.srcElement||e.target;  alert(o.tagName);}

?

13.对对象进行||操作

a.操作符"||". 如果对几个对象同时进行"||"操作的时候,JavaScript首先将这些对象 转换成 true和false,然后在进行"||"。如果一个对象 是存在的(不是undefined,不是null),那么这个对象就会转成true,否则就为false。在同时进行||操作的几个对象进行计算的时候,顺序从左到右,碰到第一个为true的对象后,就把这个对象返回(把剩下还没有判断的对象忽略),返回的时候,不是返回true或者false,而是返回这个对象自身,如下:

(function(passedObj) {            var existedObj = {};            var validObject = null ||false ||passedObj || "validString" || existedObj;            alert(validObject);  })();
?

(其中passedObj是一个 "需要"传入的参数,实际调用的时候,并没有传入,因此其必定为undefined)

那么其将会弹出 第一为true的对象,即 validString.

b.操作符 "&&" 道理亦然.碰到第一为 false的对象返回,同时忽略剩下还没有判断的对象.

c.操作符"!" 将要判断的对象 转成 true或false后,然后取反.其返回的是true或false

?

14.JS中return

今天一个刚学js的朋友给了我一段代码问为什么方法不执行,代码如下:

function  makefunc(x)  {        return function (){            return  x;        }    }alert(makefunc(0));

?其实不是不执行,只是朋友的意思这里alert出来的应该是“0”,而不是function (){return x;}。
不是脚本写错了,只是没搞懂return,从当前函数退出,并从那个函数返回一个值。如果返回的是一个函数,那么返回的也是函数本身。

如果要返回函数执行的结果那么首先要让这个函数执行,例如:

function  makefunc(x)  {        return (function (){            return  x;        })();    }alert(makefunc(0));

?这里有一个匿名函数,

(function (){           return  x;       })();

?在第一个括号内是匿名函数,第二个括号用于调用该匿名函数,您可以在第二个括号中传入所需的参数。例如:

(function( x , y){    alert( x + y);})(2 ,3 );

?来源:http://www.css88.com/archives/3738

 function  makefunc(x)  {                       return function (){                            return  x;                       }                   }                   alert(makefunc(0)());  //0
?

...

?

15、JS中的delete操作符

Javascript中,变量 = 对象属性,这是因为 Javascript 在执行脚本之前会创建一个Global对象,所有的全局变量都是这个Global对象的属性,执行函数时也会创建一个Activation对象,所有的局部变量都是这个Activation对象的属性。

它不会删除o.x指向的对象,而是删除o.x属性本身。

// Javascriptvar o = {};o.x = new Object();delete o.x;     // 上一行new的Object对象依然存在alert(o.x);            // undefined,o的名为x的属性被删除了
?
var o = {};var a = { x: 10 };o.a = a;delete o.a;    // o.a属性被删除o.a;           // undefineda.x;           // 10, 因为{ x: 10 } 对象依然被 a 引用,所以不会被回收

?通过var声明的变量和通过function声明的函数拥有DontDelete特性,无法被删除。

var x = 36;delete x;x;     // 36, x没有被删除y = 12;delete y;y;     // undefinedfunction foo() { return 42; }delete foo;foo();  // 42

?prototype中声明的属性就无法被delete:

function C() { this.x = 42; }C.prototype.x = 12;var o = new C();o.x;     // 42, 构造函数中定义的o.xdelete o.x;o.x;     // 12,  prototype中定义的o.x,即使再次执行delete o.x也不会被删除

?

但是有一点例外,就是通过 eval 执行的代码中,通过var声明的变量虽然与正常的var声明变量同属于Global对象,但它们不具有DontDelete特性,能被删除。

eval("var x = 36;");x;     // 42delete x;x;     // undefined

?但是这也有一点例外,eval的代码中的函数内通过var定义的变量具有DontDelete,不能被删除。

eval("(function() { var x = 42; delete x; return x; })();");// 返回 42

?

delete是普通运算符,会返回true或false。

function C() { this.x = 42; }C.prototype.y = 12;var o = new C();delete o.x; // trueo.x;        // undefined"x" in o;   // false// o.x存在并且没有DontDelete,返回truedelete o.y; // trueo.y;        // 12// o自身没有o.y属性,所以返回true// 从这里也可以看到prototype链的存在,对象自身属性和prototype属性是不同的delete o;   // false// Global.o拥有DontDelete特性所以返回falsedelete undefinedProperty;  // true// Global没有名为undefinedProperty的属性因此返回truedelete 42;  // true// 42不是属性所以返回true。有的实现会抛出异常(违反ECMAScript标准)var x = 24;delete x++;  // truex;           // 25// 被删除的是x++的返回值(24),不是属性,所以返回true

?来源:http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/#content_2_0

?

16、Function

很多人都不理解javaScript 中的Function是什么,与function 又有什么区别
简单的说呢 function 是函数,而Function是类

在javaScript 我们声明一个函数,实际上是创建了一个 Function 类的对象。

例如:

function sayHello(name)      {        alert("Hello "+name);      } 

??????
这是一个最简单的函数,参数为name,然后在参数前加上"Hello ",输出
同样,我们也可以这样声明函数
var sayHello = new Function("name","alert('Hello '+name)");
在这种形式中,第一个参数是sayHello 函数的参数,第二个参数是sayHello 函数的函数体

通过这种形式,我们可以很清楚的看出所谓的函数只不过是Function类的一个对象
而函数名只不过是对这个对象的引用。可以简单的把函数名理解成为一个指针,指向所引用的
Function 类的实例。
因为函数名只不过是对象名,所以可以把函数名作为参数传递,如下:

function callSay(funNam,argu)      {        funNam(argu);      }           callSay(sayHello,"xiaofei");   

?
ok,看到了,你完全可以把函数名当一个变量名来使用,因为它就是一个变量名。

来源:http://xiaofeizm55333.iteye.com/blog/83591

?

17.? void和with的用法

1. void 操作符用法格式如下:
??? ?javascript:void (expression)

void 操作符指定要计算一个表达式但是不返回值。expression 是一个要计算的 JavaScript 标准的表达式。

下面的代码创建了一个超级链接,当用户点击以后不会发生任何事。当用户点击链接时,void(0) 计算为 0,但在 JavaScript 上没有任何效果。
<A HREF="javascript:void(0)">单击此处什么也不会发生</A>

下面的代码创建了一个超级链接,用户单击时会提交表单。
<A HREF="javascript:void(document.form.submit())">单击此处提交表单</A>

2、with 语句通常用来缩短特定情形下必须写的代码量。
with(document)
{
??? write?? ( "test ");
??? write?? ( "dsasfda ");
}
如果不用的话就要这样写了
document.write?? ( "test ")
document.write?? ( "dsasfda ");

?

18、null、 undefined 、typeof

undefined:表示一个对象没有被定义或者没有被初始化
null???????? :表示一个尚未存在的对象的占位符
a.
undefined对象是从null派生出来的,所以他们是相等的。

alert(null == undefined); //true


JS基础小结

?

?

//var oTemp;if(typeof oTemp == undefined)  //false

?这里if将永远是false.要时刻铭记typeof返回的是字符串,应该用字符串比较。

//var oTemp;if(typeof oTemp == "undefined")  //true

?
JS基础小结

alert(typeof null == "object")  //true

?数组类型

alert(typeof array)    //object

?

var blen = new Boolean(false);        if(blen){  //true     alert("Test");       }          var str = new String("")  //若str = "",则if(str)为false     if(str){  //true     alert("Test");       }     alert(typeof str);  //object, 若str = ""则为string

?

alert(NaN == NaN);  //false

?

b.相等运算符和等同运算符


JS基础小结
?
JS基础小结

?

c.

一个没有返回值的function(或者直接return 返回)实际上返回的是undefined.

function cal(){return;  //undefined//return 0 ; 结果0}alert(cal()); 

?

function本质:


JS基础小结

19、JS中变量的声明

注意隐式声明的作用域是全局的,即使是在一个函数内部隐式声明,也是全局的。


JS基础小结
20、使用prototype创建的方法是实例方法


JS基础小结
?21、使用原型链实现继承

function Car(){this.color = "red";}Car.prototype.showColor = function(){alert(this.color);}function GoodCar(){}GoodCar.prototype = new Car();//让GoodCar的prototype属性成为Car类的一个实例,即可实现类型的继承GoodCar.prototype.run = function(){alert("Run fast !");}var goodCar = new GoodCar();goodCar.run();goodCar.showColor();

?
JS基础小结
?
?。。。

?

22.DOM与HTML


JS基础小结
?
JS基础小结
24、设置默认值的几种方法


JS基础小结
25.Javascript的变量范围

var herp=”one”;{var herp=”two”;}alert(herp); 

? 在这种情况下你得到的herp不是“one”,而是“two”。Javascript的变量有效范围并不是跟其它语言一样依赖于代码块。Javascript的变量范围是以函数为基础的。每个函数都有它自己的变量范围,Javascript这一点上表现的很酷,根本不理睬这毫无意义的花括弧包起来的范围。

?

26、javascript命名空间

function derp(){ alert(“one”); }function derp(){ alert(“two”); }derp(); 

?答案是“two”。并不是一定会这样,它也可能是“one”。所以,把你所有的代码都放在自己的命名空间里,这很容易。下面是定义自己的命名空间的一个简单做法。

var foospace={};foospace.derp=function(){ alert(“one”); }function derp(){ alert(“two”); }foospace.derp(); 

?。。。

?

27.回到头部

?

function scroller(){               var sTop=document.documentElement.scrollTop+document.body.scrollTop;       //获取scrollTop值,声明了DTD的标准网页取document.documentElement.scrollTop,否则取document.body.scrollTop;因为二者只有一个会生效,另一个就恒为0,所以取和值可以得到网页的真正的scrollTop值               window.scrollBy(0,0-sTop);  //把内容滚动指定的像素数(第一个参数是向右滚动的像素数,第二个参数是向下滚动的像素数)             }

?scrollTo(10,50);

scrollBy,中文"滚动到"的意思

to是绝对的意思(从整体而言),by是相对的意思(从原先的位置而言)

?

?

?

?

?

?

?

?

读书人网 >JavaScript

热点推荐