js的排序 js的查找

来源:互联网 发布:ubuntu 如何提权 编辑:程序博客网 时间:2024/06/15 10:39

js的排序

我们这里只介绍一下冒泡排序法:

算法

代码:

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript">var arr=[0,-1,90,-18,900,90,78];var temp=0;for(var i=0;i<arr.length-1;i++){   //定小循环   for(var j=0;j<arr.length-1-i;j++){             if(arr[j]>arr[j+1]){         //交换         temp=arr[j];         arr[j]=arr[j+1];         arr[j+1]=temp;       }   }     }//输出数组    document.write(arr);</script></html>
js的查找

1. 顺序查找

一个一个的比较,如果是则查找到.

var arr=[3,5,90,12,-23];var findVal=90;var flag=false;for(var i=0;i<arr.length;i++){ if(arr[i]= = findVal){document.write(”找到了这个数 下标是”+i);flag=true;}}if(!flag){document.write(”一个都没有找到”);}


2. 二分查找

面试题一定掌握!

//二分查找[递归]

//二分查找要保证我们的数组是一个有序的.

//思想是

//首先把数组的中间这个数找出,然后和你要查询的数比较

//① 你要查询的数比中间的数大则说明我们应当该数组的右边[后边]查询

//② 你要查询的数比中间的数小 .则说明我们应当该数组的左边[前边]查询

//③ 你要查询的数等于中间的数说明找到  

var arr=[1,90,100,123,4000];function binarySearch(findVal,arr,leftIndex,rightIndex){//退出条件if(rightIndex<leftIndex){document.write("查询没有结果");return;}//代码://找到中间数的下标var midIndex=Math.round((leftIndex+rightIndex)/2);if(arr[midIndex]<findVal){binarySearch(findVal,arr,midIndex+1,rightIndex);}else if(arr[midIndex]>findVal){    binarySearch(findVal,arr,leftIndex,midIndex-1);}else{document.write("找到 下标是"+midIndex);//binarySearch(findVal,arr,leftIndex,midIndex-1);}}//调用的格式binarySearch(100,arr,0,arr.length-1);

基于对象编程和面向对象编程叫法区分

js 中我们可以认为这个叫法一致.

 js的面对对象编程的介绍

js是一种支持面向对象编程的脚本语句它有继承,封装,多态的特点.

课程中 基于对象==面向对象  类==原型对象

 面向对象编程的引入

一个问题?

张老太养了两只猫猫:一只名字叫小白,今年3,白色。

  还有一只叫小花,今年10,花色。请编写一个程序,

  当用户输入小猫的名字时,就显示该猫的名字,年龄,

  颜色。如果用户输入的小猫名错误,则显示 张老太没

  有这只猫猫。

我们的一个解决方法是 :(js面向对象编程的快速入门)

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript">//定义了一个猫类function Cat(){  }//创建一只猫 [js对象的属性可以动态增加]var cat1=new Cat(); //cat1就是一个对象实例cat1.name="小白";  //cat1.age=3;cat1.color="白色"document.write(cat1.name+"--"+cat1.age+"--"+cat1.color);//特别说明// var cat1=new Cat(); //当做类(原型对象使用)// Cat(); //当做函数</script></html>

对象公开属性的访问方式有

对象名.属性名;

对象名[’属性名’];

js中自定义类(原型对象)的五种方法

1. 工厂方法

2. 通过构造函数来定义类(最多)

3. 通过prototype 来定义

4. 构造函数 和 prototype混合

5. 动态创建对象模式

js中一起都是对象

var i=0;window.alert(i.constructor);function Person(){}var p1=new Person();window.alert(p1.constructor);window.alert(Person.constructor);window.alert(Function.constructor);

可用通过 instanceof 来 判断某个对象实例是不是某个类的对象实例

案例:

//如何判断一个对象实例是不是某个 类(原型对象)

if(p1 instanceof Dog){window.alert("p1是Person一个对象实例");}else{window.alert("p1是Dog一个对象实例");}u js的对象在内存中是怎样存在?var a=new Person();a.age=10;a.name=“小明”;var b=a; 


js的对象回收机制!!!

u js的对象回收机制!!!

js中维护一张对象对用表:

GC 如何去判断某个对象是垃圾对象.

当对象的地址被引用的次数,变成0, gc 就会认为该对象是垃圾,就会回收.

js中还提供了一种主动销毁对象属性的方法

基本语法是

delete 对象名.属性名;  // 不要这样 delete 对象;

原理可以主动的销毁某个对象的属性

u this

① 提出问题?

我们在编程中,可能需要当我们创建一个对象后,这个对象就自动的有某些属性,怎么?

可以这样做:

function Person(){

//下面这句话表示,每创建一个Person实例,实例就会自动有一个属性

//name,并且是公开

this.name="小童";

}

如果你希望name是创建对象实例的时候指定,可以通过参数传入:

function Person(name){

//下面这句话表示,每创建一个Person实例,实例就会自动有一个属性

//name,并且是公开

this.name=name;

}

使用的时候:

$p4=new Person(“nini”);

$p4.name;

② 深入认识this的含义

//下面的代码讲解私有属性的怎样访问

function Person(){

var name="abc"; //私有的,只能在内部使用

var age=900; //私有的,只能在内部使用

//感受(相当于你是通过内部函数来访问私有的变量.)

//如何理解说有一个属性 show 因为前面有this 

//说明 show属性是公开该属性是指向一个函数地址属性.

//则通过 show去调用该函数.

this.show=function(){

window.alert(name+" "+age);

}

}

var p1=new Person();

//window.alert(p1.name+" "+p1.age);//错误

p1.show();

this的再认识:

<html>

<head>

<meta http-equiv="content-type" content="text/html;charset=utf-8"/>

<script type="text/javascript">

//****案例如下****

function test1(){

   alert(this.v); 

}

var v=190;

test1(); //输出什么 <==> window.test1(); 

window.test1();

</script>

</html>

u this 只能在类定义的内部使用:

//说明this 只能在 类定义的内部使用

function Dog(){

this.name="小明";

}

var dog1=new Dog();

window.alert(this.name); //报空因为这样使用,相当于去访问window对象的name属性,但是你没有写.

☞ 补充讲解一个 var 的知识点:(还有说..)

//表示全局变量

var t=90;

function test(){

t=890;

}

test();

window.alert(t);

说明: var 变量: 表示该变量是全局的如果你其他函数中,使用变量是,前面没有带 var , 则表示要使用全局变量如果你在函数中 使用变量时候,带了 var 则说明你要使用全新的变量.

u js面向对象的成员函数

如果我们希望某个对象创建后,自动有方法使用,可以在定义类的时候,直接指定成员函数.(细节...)

第一种方法: 动态的给某个对象指定函数 

*/

function Person(name,age){

this.name=name;

this.age=age;

}

//第一种方法,动态添加

function speak(){

document.write("我是"+this.name);

}

//创建一个对象实例

var p1=new Person("大黄",90);

p1.fun1=speak; //相当于动态的给p1对象分配一个fun1属性(函数);

你可以理解, fun1 是 speak函数别名

window.alert(p1.fun1);

p1.fun1();

speak(); //window

第一种方法还有一种体现形式

//创建一个对象实例

var p1=new Person("大黄",90);

p1.fun1=function speak(){

document.write("我是"+this.name);

}; //相当于动态的给p1对象分配一个fun1属性(函数);

第二种方法让所有的Person对象实例都有某个成员函数

//给所有对象分配函数

function Person(name,age){

this.name=name;

this.age=age;

this.speak=function (){

document.write(this.name+"hello");

}

}

var p1=new Person("小孩",9);

p1.speak();

var p2=new Person("大明",30);

p2.speak();

☞ 关于给对象指定成员函数说明:

如果添加的内部函数,该函数也称为特权函数所谓特权指的是可以访问对象的私有属性.

如果添加的是外部函数(给某个对象指定的函数),则这样指定函数,只能访问对象的公开属性,不能访问私有属性.

function Person(name,age,salary){

this.name=name;//公开

this.age=age;//公开

var salary=salary;//私有 

}

var p1=new Person("宋江",34,1000);

function showInfo(){

document.write(this.name+this.age+salary);//这里salary是私有

}

p1.showInfo=showInfo;

p1.showInfo();

u 一个类中可以有公开的函数

this.属性=funciton (){};

u 一个类中也可以有私有的函数

代码:

function Person(){

this.name="abc";

var salary=900;

this.fun1=function (){

  

//代码

sayHello();

}

this.fun2=function(){

sayHello();

}

this.fun3=function(){

sayHello();

}

function sayHello(){

document.write("hello,资源打开"+this.name+" "+salary);

}

}

var p1=new Person();

p1.fun2();

小结通过代码我们可以看出.私有函数可以被 该类的其它方法(公开)调用,同时私有函数可以去访问 该对象的 公开或者私有的属性.

u 第三种方式给所有的对象实例添加方法(原型法)[推荐..]

function Dog(){

/* this.shout=function (){

document.write("小狗汪汪叫");

}*/

}

//原型法

Dog.prototype.shout=function (){

document.write("小狗叫");

}

var dog1=new Dog();

dog1.shout();

对我们原型法的一个实际运用:

/*

请思考给 js 的 Array 对象扩展一个find(val) 方法

,当一个Array对象调用该方法的时候,如果能找

val则返回其下标,否则返回-1

*/

Array.prototype.find=function(val){

//顺序查找

for(var i=0;i<this.length;i++){

if(val==this[i]){

flag=true;

return i;

}

}

return -1;

}

var arr=[4,590,-1,890];

window.alert(arr.find(890));

u 自定类的工厂方法(了解即可)

当你编写 js 代码时,当你需要一个对象时,可以通过new Object 来创建一个对象,然后再动态的给该对象添加属性和方法.

//工厂法创建对象 

var obj=new Object();

obj.name="大明";

obj.show=function (val){

window.alert("ok"+val);

}

obj.show("hello");

课堂小练习

Number

var i=90;

var res=i.add(78).add(90).add(900).add(9000)

window.alert(res);


原创粉丝点击