Javascript_2_動態函數_匿名函數_String物件_原型屬性
Javascript_2_動態函數_匿名函數_String物件_原型屬性
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>javascript演示4</title> </head> <body> <h1>javascript演示4</h1> <script type="text/javascript" src="a.js"> </script> <script type="text/javascript"> /* * JS函数的其他表现形式:动态函数和匿名函数 1,动态函数,使用js内置对象Function对象 方法:new Function("参数列表","方法体"); */ var add=new Function("x,y","var sum;sum=x+y;return sum;"); println(add(6,7));//13 function add2(x,y){ var sum; sum=x+y; return sum; } /* * 这两种究竟有何区别? * 如果是function 函数名(){}这种写法就写死了! * 而,new Function("参数列表","方法体") * 参数列表和方法体 都是字符串,未知的,可变化 * 可以通过字符串动态指定!但很少使用! */ //匿名函数:没有名字的函数 是种简写形式, //这个在事件处理时,用得较多! var add3=function (x,y){ return x+y; } println(add3(4,6)); function hehe(){ println("hehe run"); } var xixi=hehe;//让xixi指向了hehe指向的函数对象 /* * 上面这两段代码就可以简写成下面这一句代码: * 即匿名函数 */ var xixi=function(){ println("hehe run"); } //综合练习1:求数组最大值 var arr1=[2,4,6,7,133,244,67]; function getMax(arr){ var maxIndex=0; for (var i=0; i < arr.length; i++) { if(arr[i]>arr[maxIndex]){ maxIndex=i; } } return arr[maxIndex]; } println(getMax(arr1));//244 //综合练习2:选择排序 function sortArray(arr){ for (var i=0; i < arr.length-1; i++) { for (var j=i; j < arr.length; j++) { if (arr[i]>arr[j]) { var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } println("排序前:"+arr1); //排序前:2,4,6,7,133,244,67 sortArray(arr1); println("排序后:"+arr1); //排序后:2,4,6,7,67,133,244 /* * 函数对象被直接打印:字符串代码 * 数组对象被直接打印:逗号连接各个数组成员 */ //综合练习3:查找 function searchElement(arr,value){ for (var i=0; i < arr.length; i++) { if(arr[i]==value){ return i; } } return -1; } println(searchElement(arr1,67)); //折半查找:又称二分查找法(前提必须是有序的) function binarySearch(arr,value){ var min,mid,max; min=0; max=arr.length-1; while(min<=max){ mid=(max+min)/2; //也可以写成>>1 if (value>arr[mid]) { min=mid+1; } else if (value<arr[mid]) { max=mid-1; } else{ return mid; }; } return -1;//循环完了还有找到 } println(binarySearch(arr1,67)); println(binarySearch(arr1,68)); /* * 综合练习4:对数组进行反转 */ function reverseArray(arr){ for(var start=0,end=arr.length-1;start<end;start++,end--){ swap(arr,start,end); } } function swap(arr,i,j){ var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } println("反转前:"+arr1); reverseArray(arr1); println("反转后:"+arr1); //反转前:2,4,6,7,67,133,244 //反转后:244,133,67,7,6,4,2 /* * JS变量的特点: * 1,只有在函数体内定义的变量是局部变量 * function 函数名(){ * var sum=0; * } */ function show(){ var show_sum=1000;//这个是局部变量,函数体外不能使用! alert(show_sum); } /* * 全局变量:在直接在script标签中定义的变量 * 在该页面的所有script标签都有效! */ var test_1="abc"; for (var i=0; i < 3; i++) { println(i); } </script> <script type="text/javascript"> println(test_1);//abc println(i);//3 在上一个script标签的for循环里定义的 println(arr1);//244,133,67,7,6,4,2 for (var i=0; i < 3; i++) {//这不是新定义变量,而是对已有i重新赋值 } /* * 下面这个例子将演示形参 */ var x=3; function show(x){//形参,局部变量 x=8; println("函数里面:"+x); } show(x); println(x);//3 function show(){ println("show run"); } println(show.toString());//相当于alert(show); var arr=[2,4,6,7]; println(arr.toString());//相当于 println(arr);//相当于 println(arr.valueOf()); /* * valueOf 方法 返回指定对象的原始值。 object.valueOf( ) 必选项 object 参数是任意固有 JScript 对象。 说明 每个 JScript 固有对象的 valueOf 方法定义不同。 对象 返回值 Array 数组的元素被转换为字符串,这些字符串由逗号分隔, 连接在一起。其操作与 Array.toString 和 Array.join 方法相同。 Boolean Boolean 值。 Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。 Function 函数本身。 Number 数字值。 Object 对象本身。这是默认情况。 String 字符串值。 Math 和 Error 对象没有 valueOf 方法。 * * * toString 方法 返回对象的字符串表示。 objectname.toString([radix]) 参数 objectname 必选项。要得到字符串表示的对象。 radix 可选项。指定将数字值转换为字符串时的进制。 说明 toString 方法是所有内建的 JScript 对象的成员。它的操作依赖于对象的类型: 对象 操作 Array 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。 Boolean 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。 Date 返回日期的文字表示法。 Error 返回一个包含相关错误消息的字符串。 Function 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称: function functionname( ) { [native code] } Number 返回数字的文字表示。 String 返回 String 对象的值。 默认 返回 “[object objectname]”,其中 objectname 是对象类型的名称。 */ var abc=function(){ println("abc run"); } println(abc); println(abc.valueOf()); println(arr.valueOf()); //String对象 var str1=new String("abc"); var str2="abc"; println(str1.length); println(str1.bold()); println(str1.fontcolor("red")); println(str1.link("http://www.baidu.com")); /* * 在Java中获取字符串长度是用方法() * 而在JS当中,用的是属性!注意区别 * substr 方法 返回一个从指定位置开始的指定长度的子字符串。 stringvar.substr(start [, length ]) 参数 stringvar 必选项。要提取子字符串的字符串文字或 String 对象。 start 必选项。所需的子字符串的起始位置。 字符串中的第一个字符的索引为 0。 length 可选项。在返回的子字符串中应包括的字符个数。 说明 如果 length 为 0 或负数,将返回一个空字符串。 如果没有指定该参数,则子字符串将延续到 stringvar 的最后。 下面的示例演示了substr 方法的用法。 function SubstrDemo(){ var s, ss; // 声明变量。 var s = "The rain in Spain falls mainly in the plain."; ss = s.substr(12, 5); // 获取子字符串。 return(ss); // 返回 "Spain"。 } * * * substring 方法 返回位于 String 对象中指定位置的子字符串。 strVariable.substring(start, end) "String Literal".substring(start, end) 参数 start 指明子字符串的起始位置,该索引从 0 开始起算。 end 指明子字符串的结束位置,该索引从 0 开始起算。 说明 substring 方法将返回一个包含从 start 到最后(不包含 end )的子字符串的字符串。 substring 方法使用 start 和 end 两者中的较小值作为子字符串的起始点。 例如, strvar.substring(0, 3) 和 strvar.substring(3, 0) 将返回相同的子字符串。 如果 start 或 end 为 NaN 或者负数,那么将其替换为0。 子字符串的长度等于 start 和 end 之差的绝对值。 例如,在 strvar.substring(0, 3) 和 strvar.substring(3, 0) 返回的子字符串的的长度是 3。 下面的示例演示了 substring 方法的用法。 function SubstringDemo(){ var ss; // 声明变量。 var s = "The rain in Spain falls mainly in the plain.."; ss = s.substring(12, 17); // 取子字符串。 return(ss); // 返回子字符串。 } * * charAt 方法 返回指定索引位置处的字符。 strObj.charAt(index) 参数 strObj 必选项。任意 String 对象或文字。 index 必选项。想得到的字符的基于零的索引。有效值是 0 与字符串长度减 1 之间的值。 说明 charAt 方法返回一个字符值,该字符位于指定索引位置。 字符串中的第一个字符的索引为 0,第二个的索引为 1, 等等。超出有效范围的索引值返回空字符串。 示例 下面的示例说明了 charAt 方法的用法: function charAtTest(n){ var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 初始化变量。 var s; // 声名变量。 s = str.charAt(n - 1); // 从索引为n – 1的位置处 // 获取正确的字符。 return(s); //返回字符。 } * */ var str="abcde"; println(str.substr(1,3));//从下标为1开始取3个长度:bde println(str.substring(1,3));//开始为1,结束为3,长度为2: bc /* * 练习1:自定义方法,去除字符串两端的空格 * 两个指针,一个从头找空格,一个从尾找空格,再取长度 * 同时提防 字符串全是空格的情况 */ function trim(str){ var start,end; start=0; end=str.length-1; while(start<=end&&str.charAt(start)==' '){ start++; } while(start<=end&&str.charAt(end)==" "){ end--; } return str.substring(start,end+1);//关键!!! } str=" a bc "; println("-"+trim(str)+"-"); /* * prototype 属性 返回对象类型原型的引用。 objectName.prototype objectName 参数是对象的名称。 说明 用 prototype 属性提供对象的类的一组基本功能。 对象的新实例“继承”赋予该对象原型的操作。 例如,要为 Array 对象添加返回数组中最大元素值的方法。 要完成这一点,声明该函数,将它加入 Array.prototype, 并使用它。 function array_max( ){ var i, max = this[0]; for (i = 1; i < this.length; i++) { if (max < this[i]) max = this[i]; } return max; } Array.prototype.max = array_max; var x = new Array(1, 2, 3, 4, 5, 6); var y = x.max( ); 该代码执行后,y 保存数组 x 中的最大值,或说 6。 所有 JScript 固有对象都有只读的 prototype 属性。 可以象该例中那样为原型添加功能,但该对象不能被赋予不同的原型。 然而,用户定义的对象可以被赋给新的原型。 本语言参考中每个内部对象的方法和属性列表 指出哪些是对象原型的部分,哪些不是。 */ //prototype属性,需求:将trim功能添加到String对象里面去 //第1种方法;先定义好函数,再指向引用,即函数名 //函数没参数,函数体使用this //第2种方法:使用匿名函数 function trim2(){ var start,end; start=0; end=this.length-1; while(start<=end&&this.charAt(start)==' '){ start++; } while(start<=end&&this.charAt(end)==" "){ end--; } return this.substring(start,end+1);//关键!!! } String.prototype.trim=trim2; str1=" a bc "; println("-"+str1.trim()+"-"); //第2种演示: String.prototype.trim1=function(){ var start,end; start=0; end=this.length-1; while(start<=end&&this.charAt(start)==' '){ start++; } while(start<=end&&this.charAt(end)==" "){ end--; } return this.substring(start,end+1);//关键!!! } str2=" ab bc "; println("-"+str2.trim1()+"-"); String.prototype.len=199; println("abc".len); //原型练习1:将字符串变成字符数组 String.prototype.toCharArray=function(){ var chs=[]; for (var i=0; i < this.length; i++) { chs[i]=this.charAt(i); } return chs; } str3="a ab bcd z"; println(str3); println(str3.toCharArray()); //原型练习2:将字符串反转 String.prototype.reverse=function(){ var arr=this.toCharArray(); for (var start=0,end=arr.length-1; start <end; start++,end--) { swap(arr,start,end); } return arr.join(); } str4="a ab bcd z"; println(str4); println(str4.reverse()); /* * Java不允许在函数里面还有函数 * 但是,JS却可以,因为函数是封装体,是对象,相当于内部类 */ </script> </body> </html>
以上就是Javascript_2_動態函數_匿名函數_String物件_原型屬性的內容,更多相關內容請注意PHP中文網(www .php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

匿名函數,又稱lambda表達式,是一種不指定名稱的函數,用於一次性使用或傳遞函數指標。特點有:匿名性、一次性使用、閉包、回傳類型推論。實戰中常用於排序或其他一次性函數呼叫。

靜態函數在編譯時綁定,無需物件實例,可存取靜態成員和全域變量,不可繼承;動態函數在運行時綁定,需要物件實例,可存取非靜態成員和局部變量,可繼承。

作為一門現代化的程式語言,Golang(又稱Go語言)具有眾多強大的特性。其中,匿名函數是Golang的一個非常重要的概念,被廣泛應用於各種場景。在本文中,我們將深入分析Golang函數中匿名函數的應用場景。事件處理器在事件處理器中,匿名函數是一個非常方便且實用的工具。可以透過匿名函數向事件處理器傳遞自訂的邏輯,例如:funcmain(){bt

如何利用PHP7的匿名函數和閉包實現更靈活的程式碼邏輯處理?在PHP7之前,我們經常使用函數來封裝一段特定的邏輯,然後在程式碼中呼叫這些函數來實現特定的功能。然而,有時候我們可能需要在程式碼中定義一些臨時的邏輯塊,這些邏輯塊沒有必要創建一個獨立的函數,同時又不想在程式碼中引入太多的全域變數。 PHP7引入了匿名函數和閉包,可以很好地解決這個問題。匿名函數是一種沒有名

是的,Go語言中的匿名函數可以傳回多個值。語法:func(arg1,arg2,...,argN)(ret1,ret2,...,retM){//函數體}。使用方法:使用:=運算元接收回傳值;使用return關鍵字傳回多個值。

如何使用PHP7的匿名函數和閉包實現更靈活可重複使用的程式碼邏輯?在PHP程式設計領域中,匿名函數和閉包是非常有價值且強大的工具。 PHP7引入了一些新的語言特性,使得使用匿名函數和閉包更加方便和靈活。本文將介紹如何使用PHP7的匿名函數和閉包來實現更靈活和可重複使用的程式碼邏輯,並提供一些具體的程式碼範例。一、匿名函數匿名函數是一種沒有名稱的函數。在PHP中,可以將匿名

PHP8.0是目前最新版本的PHP程式語言。一項重要的更新是對匿名函數的改進和增強。匿名函數(也稱為閉包)是一種特殊類型的函數,可以在運行時動態建立並傳遞給其他函數或儲存在變數中。在PHP中,匿名函數對於高階程式設計和Web開發至關重要。 PHP8.0提供了一些新的語法和功能,可以使匿名函數更加靈活和易於使用。其中一些更新如下:函數參數的類型聲明在PHP8.0中,

pythonLambda表達式是一個小的匿名函數,它可以將一個表達式儲存在變數中並傳回它的值。 Lambda表達式通常用於執行簡單的任務,這些任務可以透過編寫一個單獨的函數來完成,但Lambda表達式可以使程式碼更簡潔和易讀。 Lambda表達式的語法如下:lambdaarguments:expressionarguments是Lambda表達式接收的參數列表,expression是Lambda表達式的體,它包含需要執行的程式碼。例如,以下Lambda表達式將兩個數字相加並傳回它們的和:lambdax,
