收藏 分销(赏)

javaScript javascript 初级到高级 笔记.doc

上传人:pc****0 文档编号:7604896 上传时间:2025-01-10 格式:DOC 页数:156 大小:1.71MB 下载积分:10 金币
下载 相关 举报
javaScript javascript 初级到高级 笔记.doc_第1页
第1页 / 共156页
javaScript javascript 初级到高级 笔记.doc_第2页
第2页 / 共156页


点击查看更多>>
资源描述
113.javaScript:它和标签语言都属于描述性的语言,用于和html结合从而强化网页数据的展现,虽然语法和结构上和java类似,但实际上它是和java完全不同的一门语言,它只是函数式的语言,其实从字面意思看,它就是java的一种脚本语言,至于脚本语言是什么,以后再说。javaScript在客户端做展现必须要有浏览器的支持。 *javaScript包含3部分语法:基础语法、DOM(Document Object Model)、BOM(Brower Object Model)。 114.javaScript的初步使用:其实和在html中引入css的做法类似,js的使用也分为内部使用和外部使用。 *js的内部使用,介绍已经说过了,js是和html结合用于更好的展现数据,原则上,js是可以写在html的任何标签体中的,但一般来说,js的函数定义是写在head标签体中,而函数调用是在body标签体中,也就是上面定义方法,下面调用方法的意思,直接看例子程序: 1<html> 2 <head> 3 <title>My first JavaScript!</title> 4 <script type=”text/javaScript”> 5 alert(“Hello js!”); 6 alert(“ok!); 7 </script> 8 </head> 9 <body>第一个js</body> 10</html> 直接看4-7句, 这里就使用了js,在head标签中插入一个script标签,script就是js的关键字代表,插入script标签标表明要在此处插入一段js语句,和插入css一样,都要指定type属性,这里是type=”text/javaScript”标明标签的类型是javaScript(因为javaScript只是脚本语言的一种,还可以声明type="text/jscript",type="text/vbcript"等等,所以这个type属性是指明你下面要使用哪种脚本语言,但是javaScript比较特殊,它是所有浏览器默认的脚本语言,所以你不写type属性时,默认的就是使用javaScript,当然,这是不好的习惯)。5,6句就是标签的值,也就是js的语句,对于标签语言来说,大小写都没所谓,但是script标签里的js语句就要严格遵守java的语法,因为里面就相当于是使用java语言,5,6句都使用了一个方法叫alert(),它的作用是将输入的实参以弹出对话框的形式表现出来,java里面是严格区分大小写的,那么js的语句也必须严格区分,alert()方法要求传的是字符串类型的实参,你就必须加””,语句与语句之间要用“;”隔开,其实不用“;”隔开也行,只不过是习惯性使用而已,反正在script标签体中写语句,你就必须按照java的语言规范来做。 上面这段代码的表现形式就是在原来没插入script标签的基础上依次弹出了两个对话框,对话框的内容就是alert()方法的实参,这种对话框是Model对话框,即摩肽对话框,即你不处理的话无法做其他事情,还有一种是Modeless(非摩肽)对话框,不处理也可以做其他事情。 *外部引入js的做法:做法非常固定,其实就是在head标签体中插入。 <script language=”javaScript” src=”x.js”></script> 这句话就为html文件从外部引入了一个js文件,language=”javaScript”和type=”text/javaScript”一样意思,哪一种都行,不过language属性是比较早期的属性,现在基本上被type属性取代。src是指定引入的js文件的相对路径,javaScript文件的后缀名就是“.js”,我们参考外部引入css的做法,我们在html文件的当前路径下用记事本新建一个“01.js”的文件,内容就写上上例的script标签的标签值就行了,如alert(“你好”);,保存后,就是设定script的src属性的值为“01.js”,这样就为html文件引入了“01.js”文件。 115.js中的DOM机制的初步了解:DOM叫Document Object Model,即文件对象模型,大概意思是将整个Document 文件当做一个对象来读取里面的内容,至于如何将一个Document文件当做一个对象,后续再了解,这里主要是用一段例子代码来初步了解一下这种机制: <body> <script language=”javaScript”> document.write(“<b>这是用javaScript打印出来的!</b>”) </script> </body> 这个例子中script标签用了document.write("")这样一个方法,里面传的实参是:“<b>这是用javaScript打印出来的!</b>”,注意,这句话是一句标签语句,也就是说把一条标签语句变成字符串传到document.write("")方法中,用这个方法将这条标签语句展现出来,在网页上展现的效果就是“这是用javaScript打印出来的!”,但明显的,这条语句已经不像以往的直接写在html的body体中展现出来,而是通过js的document.write("")这种方式。那么你想一下,既然document.write("")已经可以把一条标签语言展现出来,那么它同样可以把一个标签文件里的所有标签语言展现出来。DOM就是这样的一种机制,把整个标签文件,如html文件当做一个对象,然后使用静态方法document.write("")把标签文件的语句逐条展现出来,每读取一条展现一条,而更深层次的如何将一个标签文件当作一个对象的具体做法以后再说。 l 常用的方法还有document.getElementById();,得到标签对象;document.getElementsByTagName();返回指定 tagName的所有标签对象所组成的数组。 116.js中使用变量:js中的变量叫弱类型的变量,不用指定变量的类型,变量类型是你写了变量值后,系统自动判断变量的类型,但也可以指定变量类型为var,只有这样一个类型,仅仅表示变量的意思,没其他意思,变量在js标签体中指定,一旦指定后,在同一个html文件中的所有script标签体中的js语句都可共享该变量,见代码: <head> <script language=”javaScript”> var getting; →声明变量 getting = “Welcome!”; →初始化变量 </script> </head> <body> <script language=”javaScript”> document.write(getting); →在另一个script标签中打印出变量。 </script> </body> l 还有一点表现是你可以进行一下形式的赋值: var a = 123; a = "disalone"; alert(a); 得到最后的赋值,所以说javaScript的变量始终不会固定类型。 l 在方法外边声明的变量是全局变量,在方法内部声明的变量是局部变量,这很合乎常理。但是javaScript中还 有一条规则就是,如果声明变量的时候不使用var关键字声明的变量一律当做全局变量。也就是说,即便你在方法内部声明一个变量,但是没有使用var关键字,当这个方法运行后,这个变量就会被当做全局变量进行初始化,这时你在方法外边就可以访问这个变量,容易产生一些错误。所以我们在方法里面声明变量的时候一律要用var关键字,而且尽量所有的变量声明时都使用var关键字。 关键字 l 变量的命名不能和ECMAScript的保留字(为了以后的升级而保留的关键字)和关键字冲突。 关键字: break else new var case finally return void catch for switch while continue function this with default if throw   delete in try   do instanceof typeof   保留字: abstract final protected boolean float public byte goto short char implements static class import super const int synchronized debugger interface throws double long transient enum native volatile export package extends private     boolean final short byte float static char int double long as namespace use false true null is 117.js的调试:这是javaScript使用中比较头痛的地方,使用js的过程中,如果js的语法出现问题了,浏览器不会显示相关的打印内容,那么你就知道js的语句肯定哪里出问题了,但是浏览器不会给你报任何出错的信息,以前的程序只能硬着头皮一句一句的检查,或使用最原始的方法,删一点试一下,删一点试一下,或者像调试java那样用System.out.println()打印一些东西出来,但区别是js是用alert()方法弹出一些信息而已,做法效率很低,现在比较好的做法是使用浏览器的脚本错误提示功能,打开IE浏览器(必须是IE)→工具→Internet选项→高级→拉到差不多最下面→把“禁用脚本调试”的两个选项的√去掉→然后把下面的“显示每个脚本错误的信息”的√选上→点确定。然后你在运行含有js的html网页时,出现错误的话浏览器会弹出一个对话框,点它的“详细信息”就可以看到js语句哪里出错了。这种做法只能说是没得选的情况下的做法,如果该网页是动态的网页,这种做法还是不行。更好的做法是用“firefox浏览器+它的firebug插件”,先下载firefox浏览器并安装,打开后,工具→附加组件→插件→搜索“Firebug”→安装插件即可。安装完成后在firefox浏览器的右上角会出现一个虫子标志,点小虫子的下拉按钮,把界面位置选择为“下”,并在 工具→选项→内容中把启动javaScript的√选上。那么当你用firefox打开含有js的html网页时,当js出现语法错误了,Firebug的小虫子就会有提示,打开调试面板,点“脚本”就可以设置断点之类的调试操作了,“控制台”中是出现错误的所有js语句。 118.js的基本语法:js的语法基本上也就是java的语法,但它的语法比java更简单些,或者说要求更低一些,这里说一下js语法与java语法的微小差别。 ①js对变量的要求不高,是一门弱变量类型的语言,不是没有变量类型,而是所有变量类型都用var表示,如var i = 5; var str=”你好”; var islive = false;等,但是忽略掉var不写也是可以的,但是不推荐这样做,比如你可以i = 5; str = “你好”; islive = false;,因为js会自己根据变量值来判断变量类型,但这种做法不推荐,比较规范的做法是使用var来修饰变量,先定义变量再初始化,或者同时定义与初始化。 js中定义浮点类型的时候可以写成var f = .123;和var f = 0.123是一样的。小数也是直接赋值给变量就行了,解析器会自行判断。 声明变量的时候我们常常会这样写var a, b, c;这样就一次性声明了a, b, c三个变量,然后下面可以挨个给他们赋值,这种写法和java一样。其实最常用的变量声明方式是直接声明变量,然后赋值,如var a = 1;var s = "HelloWorld";或者比较怪异的是var a=b=c=123;声明多个变量的同时赋值。或者这样写var a = 1, b=2;都是没问题的,方式非常灵活。 l javaScript的Number类型。其实就是在javaScript中所有的数值的类型都归类于Number类型。这个Number类型没有像java一样很详细的将哪部分数字归类于那种具体的类型,它仅仅有一个最大的范围和最小的范围。如我们输出alert(Math.pow(2000, 2000));得到infinity,无穷大的意思,也就是超过了Number类型的最大数值范围。其实用Number的一些常量可以得到Number的最大范围以及最小范围,alert(Number.MAX_VALUE);得到1.7976931348623157e+308,也就是最大的正数。而alert(Number.MIN_VALUE);得到的则是5e-324,最小的负数。alert(Number.POSITIVE_INFINITY);得到infinity,而alert(Number.NEGATIVE _INFINITY);得到-infinity,这几个常量在实际使用中不知有什么意义。怎样判断一个数是无穷大,还是有穷大呢,用isFinite()方法 js中Undefined的意思是变量的值没有定义,比如说你定义了一个变量var a;然后你直接打印a,得到的就是Undefined,表示变量值未定义。但是就算是这样,它也是合法的输出,你可以理解为这个变量的值就是Undefined(注意Undefined也是一种数据类型,这种数据类型只有一个值,就是undefined)。另外一种出现Undefined的情况是你的变量都没有定义时,就对该变量进行打印,比如你直接alert(b);这个时候也会出现b is not defined,不过是浏览器端报错的表现,程序出现错误了,你这个变量根本不存在。 js还有一个输出信息叫NaN,它是Not a Number的缩写,什么时候会出现呢,比如我定义两个变量,var num = 2; var str = "Hello"; 一个是数字一个是字符串,如果我对着两个变量值进行运算,如alert(num/str);得到的就是NaN这个名词的输出,表示输出的结果不是数字,而在java这种强类型的语言中,这样的写法会报错,所以这是js变量弱类型的表现,另一个表现就是如果我alert(124*"22");得到的是不是NaN呢?不是的,它得到的是124*22的运算结果,js是这样处理的,在做加减乘除等运算的时候,编译器会先检验运算符号两边的值是不是数值类型(js中的数字全部用数值类型表示),如果不是数值类型,它不会马上输出NaN,而是尝试将非数值型的变量转换为数值型,所以"22"就被自动转换成22的数值,依然可以进行运算,但是"abc"是不可能转换为数值类型的,所以会输出NaN。特殊的,js会将空串""转换为0,相当于对"0"进行转换,所以alert(""*123);得到0。 关于NaN,还有一点要强调的是,NaN是一种特殊的Number类型,比如说alert(typeof NaN);得到的是Number。但是我们说"abc"*1将"abc"这个字符串转换为数值,得到的是NaN,表示不是一个数字类型,但是alert(typeof "abc"*1);的结果却是Number,但这并不表示"abc"就转换成了一个数值,"abc"*1的结果是NaN,而NaN是一个特殊的Number,所以alert(typeof "abc"*1);的结果是Number,仅仅是这样而已。然后就会出现这样一种情况,比如我用一个询问框向用户要一个年龄,首先,不管用户输入什么值,返回的都是一个字符串吧,因为prompt()方法的返回值必然是个字符串,那么我就应该将这个字符串转换为数值,“字符串*1”进行快速的转换,然后我就判断,如果转换后的值的类型是Number,我就做相应的操作,但是用户如果输入"abc",转换虽然是NaN,但它也是Number呀,所以我必须判断转换后的值必须是Number类型,且不能是NaN。好了,判断一个值是不是Number类型用typeof关键字来判断呀,但是判断一个值是不是NaN怎么判断呢?“if(变量==NaN){...}”这样吗?不是的,NaN很特殊,它自身是不等于自身的,也就是alert(NaN == NaN);是false,原因是NaN不是一个具体的值,它只是表示这个变量它不是数值而已,所以不能这样判断,js中提供了一个函数叫isNaN()来判断某个变量是不是NaN,比如alert(isNaN(NaN));得到的才是true。 l Number类有两个经常使用的方法: Ø toFixed()方法,用于指定小数点后的位数,toFixed() 方法能表示具有 0 到 20 位小数的数字,超过这个范围的值会引发错误。如果不指定参数,参数默认为0。该方法会自动进行四舍五入。 var oNumberObject1 = new Number(68); alert(oNumberObject1.toFixed(2)); //输出 "68.00" var oNumberObject2 = new Number(68.125); alert(oNumberObject2.toFixed (2)); //输出 "68.13" Ø toExponential()方法,将数字转成科学计数法的形式,结果以字符串形式返回。有一个参数,指定要输出的小数的位数。 var oNumberObject = new Number(68); alert(oNumberObject.toExponential(1)); //输出 "6.8e+1" Ø toPrecision()方法,指定整个数字的位数(整数位数+小数位数)。如果不指定参数,默认将数字后面多余的零去掉,如68.4500转换成68.45。该方法会自动进行四舍五入。 var oNumberObject = new Number(68.125); alert(oNumberObject.toPrecision(4)); //输出 "68.13" ②js里的语句(值)是区分大小写的,与java一样,不多说了。 ③用“+”合并字符串,和java一样。 但对于+号来说呢,我们知道,在js和java中,+号可以是数字的运算符,也可以是字符串的相连符。之前我们的观点是只要一个表达式中有字符串相连,其他非字符串的变量都会变成字符串进行相连,其实这样观点是错误的。不管在java还是js中,都会有,比如一个布尔类型的 变量boo = true;那么你输出boo + "布尔"的时候,得到的结果是“true布尔”,表明boo这个变量值转换为字符串与后面的字符串做相连了。而输出123+"456"得到的是“123456”这个字符串的输出,符合以往的观点,但是1+2+3+"456"呢,输出的则是"6456",这个也是一个字符串,问题是为什么不输出"123456"这个字符串呢?原因是当这个表达式的开头的两个或两个以上的值是数值的,则先按照数值相加得出结果,再把这个数值转换为字符串和后面的字符串相连,得到最后的字符串输出,而如果一开始是字符串,则后面的所有标量都会转换为字符串相连,不会再出现数值的相加,如"123"+4+5+6,得到的是"123456"这个字符串的输出。这个特点在java和js中都是成立的。 ④定义数组,有所区别:主要是你指定数组的长度时不起作用的,如var arr = new Array(3); arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4;我虽然已经指定了数组arr的长度是3,但是我却可以指定arr[3]的值,我甚至还可以指定arr[10]的值,也就是说,你规定数组的长度在js中是不起效果的,老马说:js底层数组的原理是,它把每个数组看成和Dog,Cat一样的一般对象,我们知道,一般对象是有自己的成员变量的,而对于js的数组对象来说,每个底标都是它的成员变量,如1,2,3,4,5…n等都可以是它的成员变量,然后底标对应的值就是成员变量的值,而java中是不能用数字做变量名的,这就是不同点。所以js的数组和java的数组在原理上就有区别,除了这小点外,其它基本上都是相通的。还有一个重要的区别就是js的数组不管是指定长度还是指定数组的值都是用小括号()的,当()中输入一个数时,表示你要指定这个数组的长度,如果输入多个数,用逗号隔开,表示你要初始化数组的元素,而不是java的指定数组长度用中括号[],指定数组的值用大括号{},比如js指定数组长度var arr = new Array(3);指定数组值var arr = new Array(1, 2, 3, 4, 5);而java则是int[] i = new int[3]; int[] i = new {1, 2, 3, 4,5}; 比较特殊的是,js中,数组的长度是数组最大的下标值加1,它的意思是,var a = new Array(); a[4] = "dialone"; alert(a.length);输出的结果是5,虽然数组中只有一个元素,但是这个元素的下标是4,所以数组的长度就是4+1=5。前提是最大的数组下标必须是正整数或者是0,如果是负整数,不管你最大的数组下标是什么,数组的长度都是0。 js的数组还有一种创建的方法,上面是用()创建,也可以用[]来创建,比如var array = [];表示创建了一个数组长度为0的数组,相当于var array = new Array();但是区别在于,var array = new Array(3);这里的3仅仅表示数组的长度,你这时输出array[0]得到undefined,而var array = [3];这里的3则表示这个数组的0位元素是3,这时输出array[0]的结果是3,这是两种数组声明方式的不同点,[]的声明方式无法直接声明数组的长度(要声明数组长度的话直接指定length属性的值就行了),只能直接初始化数组元素,而var array = [1,3,"abc",true];和var array = new Array(1,3,"abc",true);是一样的意思。 actionScript的数组用push()方法向数组中添加元素,返回值是被添加进去的元素的下标值+1,也就是新数组的长度,因为数组的长度是最大的元素下标值+1嘛,那种语言都是这样的。javaScript也有push()方法,用法一样,作用是往数组的最后面添加元素,以往我们向数组的最后添加元素的做法是var array = new Array(); array[array.length] = "element";用数组的长度作为新的下标值,就始终可以在数组的末尾添加一个元素,当然,你也可以使用现成的push()方法。而且push()方法可以同时向数组末尾添加多个元素,比如array.push(1,3,5,"abc");这样就同时向数组中添加了4个元素。 javaScript中也使用delete关键字,比如说你要去掉数组array下标为1的的值,可以delete array[1];这种写法相当于array[1] = undefined;不会改变数组的长度。 这里介绍数组的join()方法,它的用途是将数组内的所有元素转化为字符串,然后相连成一个长字符串。这个方法是有一个字符串类型参数的,用来充当短字符串相连时的分隔符,比如var array = new Array(1,2); alert(array.join(""));输出的是12,如果你不输入这个参数,默认用逗号作为分隔符,如alert(array.join());得到1,2。实际使用中有什么意义呢?如果你想让大量的短字符串连接成一个长字符串,以往的做法是: var str = ""; for(var i = 0; i < 100; i++){ str += "abc"; } 然后你输出str 的话就得到长字符串,但是这种做法效率并不高,下面介绍用join()方法来提高效率: var array = new Array(); array[0] = ""; for(var i = 0; i < 100; i++){ array.push("abc"); } array.join("");//输出这个函数的返回值。 上面两段函数的执行结果是一样的,但是下面这种做法的效率会高一倍以上,特别是相连的次数越多,效果越明显,所以实际开发中遇到大量的字符串用循环相连时往往会将他们先装到数组中,再调用join()方法完成连接操作。实验的时候你就不要进行结果的输出了,会拖死浏览器的,只需要记录代码前后的毫秒数就行了。 ⑤js和java一样都是面向对象的语言,所以都是采用new对象的做法,但是js new出来的所有对象都是看成一般的对象,有成员变量,有变量值。 和java一样,js中也是有一个内置的Object类的。在java中,Object类是所有类的最根类,我们一般不会new一个Object类的对象出来。但是在js中,它的Object类可以看成一种变量类型,就是“对象类型”。当我们向在js中快速的封装一个对象的时候,就是new一个Object类的对象出来的: var obj = new Object(); obj.name = "disalone"; obj.age = "23"; ..... 很特殊的是,当你new出一个Object对象之后,你可以直接给它定义属性名以及属性值,定义临时的属性,用“对象名.属性名=属性值;”来定义。意思是说,你想让这个Object类有什么属性它就有什么属性。所以当你想把某些数据封装在一个对象中,你就可以快速的new出一个Object类的对象,然后自定义它的属性名然后赋值,这个对象就产生了,访问对象的时候,用“对象名.属性名”即可。但实际上,用“对象名.属性名=属性值;”来定义属性,你会发现“对象名”不断的重复敲,那么有一种更简便的做法是: var obj = { name : "disalone", age : "23", 2 : "用数字做属性名也行" ..... } 这种做法在actionScript的时候已经介绍过了,actionScript中的Object就是一种类型,定义的方式是: var v11:Object = {id:3, name:"zhangsan", age:18}; 就像定义一个Map容器一样,其实我早就说过,对象就像一个容器,键-值对的方式保存一系列的数据而已。这种定义方式叫“对象字面量”。好了,实际开发中,这种定义对象的方式是最常用的,而new Object()的方式因为代码比较多的冗余,所以不推荐使用。而之前我们说定义数组时用var array = new Array();的方式定义数组在实际开中也不推荐使用,而使用var array = [];的方式,这种方式叫“数组字面量”,也是因为编码更简洁的原因。 另外一个非常古怪的地方就是,上面我们声明了一个对象叫obj,并给它定义了两个属性name和age,那么我们访问这两个属性的时候,obj.name和obj.age的方式肯定是可以访问成功的,而且用obj["name"]和obj["age"],也是可以访问成功的,后者的访问方式更像访问一个数组,但是数组只能用数字做下标,而这里我们在原本数组下标的地方放置一个字符串,可以访问到对象的属性值。更古怪的是,我甚至可以声明成(这种声明方式很常用): var obj = { "姓名" : "disalone", "任意字符甚至中文": "23", "#$%" : "#$%" ..... } 然后我访问的时候是“obj.姓名”或者“obj["任意字符甚至中文"]”都可以访问得到,但是“obj.#$%”则会报错,只能“obj["#$%"]”,所以如果你用常规的对象的访问方式而不是数组的访问方式来访问一个对象的属性,它对这些特殊符号还是有点限制的,而你用数组的方式则没有任何限制。更有甚者,我们上面声明的是一个对象,但是你可以obj[1] = 65;这种方式添加属性,然后alert(obj[1]);照样可以访问。事实上,javaScript中的数组就是在对象的基础上扩展出来的,你就理解为数组是对象的子类,也是一种对象。它拥有比对象更多的功能,比如length属性,push()方法等等,这是Object类没有的。所以数组是拥有对象所有功能的,因为数组也完全可以像对象一样定义: var array = []; array.length = 123; //上面两句和var array = new Array(123);一个道理,如果现在直接打印出这个数组,得到的是122个逗号“,,,,,,,,,122个”, //因为你声明了一个长度为123的数组,却没给它赋值元素,所以打印出来所有的元素都用空字符串来表示。 array.name = "disalone"; alert(array.name); //这里就用对象的方式定义元素,并对元素进行访问了。 所以总结一个规律:数组可以用对象的方式(用“.”)来声明与访问元素;对象可以用数组的方式(用“[]”)来声明与访问属性,但是数组毕竟是数组,你不能“数组对象.数字”来声明或访问元素,只有对象可以这样做。对象也不能用“#¥%……”等的特殊字符来声明或访问变量,除非把他们写成字符串,见上面。反正这些关系很混乱,也没什么实际意义,就是为了说明数组和对象之间存在的联系。 ⑥前面已经说了,js的变量类型是根据变量值来自行判断的,所以变量名都取得比较形象,如result等,变量之间的运算还是和java一样,如:var result = 3 + 3; var str = “你好” + “吗?”; 不多说了。 ⑦逻辑运算和java 也一样,直接举例: var result1, result2, result3; →定义变量; result = true&&false; result2 = true||false; result3=! true; →变量赋值; document.write(result1 + “ “ + result2 + “ “ + result3) →打印变量值; 演示的是java中的“逻辑与”与“逻辑或”而已,true && true = true; true ||false = true;所以打印出来的结果是:false, true, false。 特殊的,在js中false和true两个关键字也可以进行比较,如alert(true > false);得到的结果是true,它实际是将true转换为数字1,false转换为数字0进行比较。更特殊的是,在java中&&或||这种逻辑运算符的两边必须是Boolean类型的变量,但是在js中则不一定,我可以alert(3 && 4);得到的是4,alert(true && 4);得到的是4,这是非常奇怪的,原因是js把0这个数值在判断真假时潜意识的认为是false,而其他数值都认为是true,所以(3 && 4);判断的过程是先判断3,是true的,因为是短路与,所以还会判断后面的4,也是true,最后输出后面的4,而如果(0 && 3),也是先判断0,是false的,因为是短路与,所以不判断后面的内容了,直接输入找到的第一个是false的数值,所以输出0,同理(0 || 3)输出3,(3 || 0)输出3,所以说,在js中,数值是可以当做真假来判断的,0是假,其他都是真,按照&&,||正常的逻辑判断后,输出是一个数值,虽然这种比较没什么意义,如果你想输出boolean类型的值,看下面。而这种写法稍微有点意义,alert(!!1);得到true,alert(!!0);得到false,什么意思呢,在js中,所有数值,只有0在代表真假时默认代表false的,而其他数值都表示true,但是如何将一个数值快速转换为一个boolean类型的值呢,在它前面加“!”就行了,比如说1潜在是表示true的,那么!1就转换为boolean类型了,但是这样写就变成相反了,变成false,所以我们想知道1潜在是真还是假,alert(!!1);就行了,在一个数字前面加上“!!”是快速得知这个数值是真假的方法。那么alert(!!(3 && 4));输出的一定是true,因为(3 && 4)输出4,而在4前面加“!!”得到就是true。 与上面类似的,在js中,字符串也有真假的隐藏意思。默认的,js认为空串""在真假判断是表示假,其他任何字符串表示真,不举例了,与上面类似。 l ===,javaScript中一个特殊的运算符,叫严格相等。它和“==”的区别在于,“==”只要求值相等,而“===”则要求值和类型都相等才返回true。我做的实验是用1和true进行“==”比较,得到true,而用1和true进行“===”比较,得到false,而用!!1和true进行“===”比较,得到true。注意,用其他数字不行,只能用1,这是个很特殊的数字。 ⑧使用substring()方法,如var str = “abcdefg”; document.write(str.substring(3, 6)); 截取出来的是def,注意substring(3,n);截取出来的是第3位到第n-1位。 对于javaScript中的String类,它还有不少的方法,有些常用,有些不常用,下面用一个例子介绍: var str = "some string here"; alert(str.length);//输出16,字符串的长度,包括那些空格。 alert(str.indexOf("o"));//输出1,返回字符串中某个字符所在的下标,从左往右先找到该字符,再从0开始数得到下标值,没有 //找到该字符的话返回-1。 alert(str.lastIndexOf("s"));//输出5,和indeOf()方法不同的是,这里先从右往左找到该字符,然后从左往右数下标值(注意要 //把空格当做一位)。 alert(str.charCodeAt(0));//输出115,先根据参数为下标找到字符,然后返回该字符的unicode编码。 alert(String.fromCharCode(65,66,67,68)); //输出ABCD,它会将形参中的每个数字看成unicode码,转换为相应的字符后组成 //字符串返回。 alert(str.replace("some","much")); //输出much string here,进行字符串中字符的替换。 alert(str.substr(1,2)); //输出om,从下标1开始往后截取两个字符(注意上面只是进行字符替换,没有重新赋值,所以这里的 //str还是原来的值)。 alert(str.substring(1,2)); //输出o,从下标1开始截取,截取到下标为2的字符(注意不包括下标为2的字符,和java的substring() //方法一样)。 alert(str.toLowerCase()); //转成小写。 alert(str.toUpperCase()); //转成大写。 alert(str.split(""))
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服