JS-2-函数-对象-数组

5
函数

★函数的作用与定义

function 函数名 (参数列表)
{
程序代码
return 表达式; //没有return 就是undefined
//return ; 也是undefined
}
如果有返回值
可以 变量 = 函数名(参数1,参数2,...)
也可 直接使用[需要的地方填上去就是了]

=============重要==================
对于JS:
<script language="javascript">
var msg="globe variable";
function add(x,y)
{
var sum;
sum = x+y;
return sum;
}
function show()
{
var msg="local variable";
alert(msg);
}
show();
sum=add(3,3);
alert("sum=" + sum);


</script>

★server把网页输出,不管里面的东西
★浏览器不样,看见<script language="javascript">
就按照 脚本 对待了,
浏览器会一条一条 读,读到alert就输出,等待你点确定再读下去!
读到函数就是函数了,不会做什么,函数是等你调用的.
所以,在任何函数外边声明的变量是全局变量,[一上来就读到了嘛]
任何函数外边的 代码 也会一上来就执行!
[但是,通常我们都是写一个一个函数,供事件去调用]
所以,所以,所以 JS也可以用ALERT()这个方法来调试!!!!

★再说一个 ,上面的 var msg="globe variable"; 作用范围是不是 整个 <script>??

不是的,不仅仅是,而是这张网页的所以的JS都可以用的

★★搞笑搞笑,JS里也可以玩 值传递 引用传递
看下面的例子:两个
思路:后台给了一个全局集合,我可以在一个函数里改变集合里的某些值,
后面的函数用到后,值也变了!
[就是说全局的东西最好只是用,别去改,一改后面用的都是改后的了]
[当然,如果牛,可以做一个恢复函数,一call,把全局变量里的东西复位!]

<script language="javascript">
var msg="全局变量";
function show()
{
msg="局部变量";
}
show();
alert(msg); //★是 局部变量 [已经改了]
</script>

<script language="javascript">
var msg="全局变量";
function show()
{
var msg;
msg="局部变量";
}
show();
alert(msg); //★是 全局变量 [这次改的是 新定义的了]
</script>

===============================
★参数个数可变的函数
这个主要是JS提供了一个 内部对象 arguments
看一个例子好了
<script language="javascript">

function testParams()
{
var params = "";
for(var i=0;i<arguments.length;i++)
{
params += " : " + arguments[i];
}
alert(params);
}

testParams("hb",134);
testParams("hssb",134,'mxy');

</script>

★创建动态函数
就是模拟 函数指针 的 需要用到一个 内部对象Function
var funName = new Function(arg1,...,lastTxt);
说明,所有的参数必须是字串,最后的参数必须是这个动态函数的功能代码!

<script language="javascript">
var sum = new Function("x","y",
"var sum;sum=x+y;return sum;");
alert(sum(3,2));
</script>

★这个东西,会用的人可以把功能做的无比强大,
普通的函数是写死的嘛!
这个动态函数是字串拼的,功能动态定!你说强大不强大!!


★JAVASCRIPT中的系统函数
说几个,现在可能不会,以后谁也不知道,说不定天天用!
1
encodeURI

var urlStr = encodeURI("http://www.g.cn/index.do?country=中国&name=b b");
alert(encodeURI(urlStr));

这个会给你URL编码,以后 传中文 不用愁了吧!!让JS给你做好了,
不过这个编码后 出现的 希奇古怪 的东西,我认为可以指定按照什么字符集进行编码的
http://www.g.cn/index.do?country=%25E4%25B8%25AD%25E5%259B%25BD&name=b%2520b
查一查好了[上面的希奇是我错了,我用了两次encodeURI]

2 decodeURI
然后我这里也用两次把它还原好了!![完全可以的]
<script language="javascript">
var urlStr = decodeURI("http://www.g.cn/index.do?country=%25E4%25B8%25AD%25E5%259B%25BD&name=b%2520b");
alert(decodeURI(urlStr));
</script>

3
parseInt
把一个字串变 指定 进制的整数[这个有用吧!!]
parseInt(numString,[radix]) radix[2-36]
如果没有指定第二个参数
那么前缀 0x 自动变 16进制
0的自动变 八进制
其他的 十进制

★有个小密码 parseInt 碰到字母 也没有关系,只取字母前的数字 !
有高手可以用这个方法取出 字串 里的 字母

<script language="javascript">
alert(parseInt("110",10));//110
alert(parseInt("110",2)); //6
alert(parseInt("110abc",2)); //6

var num = 11;
alert(num.toString(2)); //1011

alert(11.toString(2)); //这样不可以!!!

</script>

4 parseFloat

5 isNaN

parseFloat parseInt 如果碰到全字母,返回 NaN 只可以用这个方法判断!
这个方法还可以单独判断 是不是一个纯 数字!
alert(isNaN("dd")); //true

6
escape方法
把非ASCII字符用%XX编码 替换 ,XX是UNICODE编码的16进制
用途是简单加密!
cookie就是这样加密的

7
unescape 方法
解码了

8
eval

也是动态的,可以看另外一篇东西
=====================================
6 对象

★对象 与 实例
[类 与 实例]

对象嘛,就是一个数据类型,烦一点而已[有属性有方法而已!]
人: 年龄 性别 吃饭()

对象里包含的变量:属性
包含对属性操作的函数:方法

都叫 对象的成员!!

重要:
JS里,都是function
只要定义了 构造函数,就等于定义了一个对象!
使用new 和 对象 的构造函数,就可以创建对象实例了
var objInstance = new ObjName(args.....);
重要:
objInstance 只要是合法的实例名即可!
new 一定要!
ObjName 已经存在的 构造函数!!

=============例子============
<script language="javascript">
function Person()
{
//这就是构造函数了,完全可以就这么写!什么都没有[参数 变量 方法]
}

var person1 = new Person(); //实例弄出来了
person1.age=18;//属性!第一次出现就表示新增加!
person1.name="zhangxiaoxiang";//随便加,加到内存满!!!
alert(person1.name + " : " + person1.age);
//用点访问 这很通常!!
//重要重要 还可以用 person1["age"];
//这有非常大的好处,可以动态访问,age是字串,可以动态改变!!

function sayFunc()
{
//alert(person1.name + " >>>>> " + person1.age);
alert(person1["name"] + " >[[[>> " + person1["age"]);

//可以动态改变哦
var temp= "name";
alert(person1[temp] + " >动态>> " + person1["age"]);

}
person1.say = sayFunc; //这个就是方法了
//用了() 就是 返回值给 say 了
person1.say();

alert("test eval()");
//前面说了 eval 可以动态 改变
//下面说个例子

alert(person1.name);//zhangxiaoxiang
eval("alert(person1.age);");//18 ,但是这里面是字串
//可以自己改变的哇,例子就不举了,应该知道了 自己拼装嘛
//写一下吧:
var x = "name";
eval("alert(person1."+ x +");");

</script>
=============================

★构造方法 和 this 关键字的 作用
刚刚说的 new 弄出来的都是 同样的东西
加上 构造方法 就不一样喽!!

所有对象在new 创建时都会调用 构造函数,
在构造函数中增加的属性和 方法都会被加到每个对象上

重要:千万别在 构造函数里有什么return 语句!

this 关键字是说:
重要:某个属性或者方法执行时,引用改属性或者方法的当前实例!!
========================
<script language="javascript">
function Person(name,age)
{
//alert("name is : "+name + " age is : "+age);
this.age=age;//就相当于第一次嘛,就新加了
this.name=name;
this.say=sayFunc;
}

function sayFunc()
{
alert(this.name + ":" +this.age);
//重要重要重要,这里的this任何情况都不可以省略
}
var person1 = new Person("aa",10);
person1.say();
var person2 = new Person("bb",11);
person2.say();
</script>
========================

★在函数中修改参数值的问题

值传递 和 引用传递
[不是前面说的全局 局部了]
========值传递================
<script language="javascript">
function changeValue(x)
{
x=5;
}
var x=3;
changeValue(x);
alert(x);
</script>
========================


========引用传递=======传对象=========
<script language="javascript">
function Person(name,age)
{
this.age=age;
this.name=name;
this.say=sayFunc;
}

function sayFunc()
{
alert(this.name + ":" +this.age);
}

function change(p1)
{
p1.name="jack";
}
var p1 = new Person("rose",10);
change(p1);
p1.say();
</script>
========================


7 JS内部对象
了解越多内部对象,工作就越舒服
有两类内部对象
1.动态对象[要new出来,实例名.成员]
2.静态对象[不new,直接 对象名.成员]

★Object对象
★String对象
★Math对象
★Date对象
★ 每个对象的 toString 方法

Object对象
[他的出现 就 使我们懒得去弄一个function当自己的对象了
反正属性什么的都可以任意加么]
--------------
<script language="javascript">
var person = new Object();
person.name = "mike";
person.age = 17;
alert(person.name);
alert(person.age);
alert(person["name"]);
alert(person["age"]);
</script>
--------------------

String对象
动态对象,new后才可以用 方法 属性
length属性[不用说了,这个属性不new也可以用]
//JAVA里,可是一个方法哦,JAVA要()的JS不要了

方法:
#big();
#bold();
#fontcolor("red");
#link("http://www.ss.com");
等等,这些N多N多的法,都是为J2EE准备的
可以给你生成一些 标签 MSDN 或者JS 官网上有!

#charAt();
某位置上一个字符[0 开始 索引超出返回空"",不是NULL哦]

#indexOf();
[第一次出现的字符或者字串的位置,方向→,没有返回-1]
#lastIndexOf();
[第一次出现的字符或者字串的位置,方向←,没有返回-1]
如果字串里只有一次出现某字符,这两个是一样的

重要重要
可以只用某一方法 查出所有 子字符
在 父字符 里的位置
======
超级经典的代码:
<script language="javascript">
var str = "hello,hubin,hhi";
var pos = str.indexOf("h");
while(pos != -1)
{
alert(pos);
pos = str.indexOf("h",pos + 1);
}
</script>
======

#replace(old new);
[只替换第一个哦]
如果要全部替换 可用 正则表达式
str.replace("it","at");[一个]
str.replace(/it/g,"at");[全部](不知道有没有replaceAll)

#split

#match [配合 regex]
#search[配合 regex]

#slice [就是subString [头 和尾) 没有尾就全部 ]

#substr[头 长度]
#substring[头 和尾)

#toLowerCase
#toUpperCase


charCodeAt();
[返回UNICODE码 'g' 返回103 ]
charCodeAt().toString(16)就返回67 知道是g了吧
可以诗试中文


★Math 对象

var num = Math.random();
属性:E 差不多2.718
属性:LN10 差不多2.302
属性:LN2 差不多0.693
属性:PI
属性:SQRT1-2 2的平方根分之一
属性:SQRT2 2的平方跟

方法
abs
sin
cos
asin
acos

★Date
1970 1 1 0:0......

构造函数
Date()
Date(dateVal[浩淼值])
Date(year,month,date,hours,minutes,seconds,ms);

#parse() 分析一个字串 返回时间值[MSDN里有格式]
var datestring = "November 1,1997 10:15 AM";
var datestring = "7/20/98"; //month/day/year
var datestring = "July 10 1997";

#toGMTString "05 Jan 1997 00:00:00 GMT"

#getYear()
#getMonth() [0 start]
#getDate()
#getDay()
#getHours()
#getMinutes()
#getSeconds()
#getMilliseconds()
#setXXXXXX

#getTime() 浩淼数

★toString方法
不同对象有不同的方法
整数
toString(16)
toString(2)

8 对象专用语句
1
with (对象名称)
{
//比如对象有一百的属性,你都要用
//但是你懒得写一百次对象名,就可以这样用
//这里就不要写对象名了,直接用 属性名和 方法了
getDate();
getYeae();
...
}

2
for..in
for(变量 in 对象)
{
//把对象的属性一个一个 赋值给 变量,
//你都不要知道里面有哪些变量名称和变量个数
对象的属性取值可以用[]
所以 对象名[变量] 可以得到 了
}
==========================
9 数组

重要性就不说了,
说说和对象的区别[相同点就是都是 数据的集合]
数组其实是一种特殊的对象[里面的属性都一样就OK了]

★数组列表
[] 用 ,分割 ,里面的东西可以是任意数据类型(其他数组也OK)
var arr=["suzhou",123,'bb',3.14];
重要,[]里面的东西才是 数组列表
arr指向了它,就是数组啦!!!
数组有个length属性,表示元素个数
可以这样访问: arr[i] 0 start
<script language="javascript">
var arr=["suzhou",123,'bb',3.14];
for(var i=0;i<arr.length;i++)
{
alert(arr[i]);
}
</script>

=========
注意:列表里可以是 表达式 ,可以为空[undefined]
var arr=[1,,,5];
=========

======看看数组的数组===二维数组[乱叫一下]吧==
var arr=[["hb","mm","yy"],["male","fe24","fe3"]];

<script language="javascript">
var arr=[["hb","mm","yy"],["male","fe24","fe3"]];
for(var i=0;i<arr.length;i++)
{
for(var j=0;j<arr[i].length;j++)
{
alert(arr[i][j]);
}
}
</script>

============

====重要,里面假如有个不是数组的元素呢??==
var arr=["along",33,["hb","mm","yy"],["male","fe24","fe3"]];

<script language="javascript">
var arr=[33,["hb","mm","yy"],["male","fe24","fe3"]];
for(var i=0;i<arr.length;i++)
{
if(arr[i].length)//这是检查是不是数组的[没有length 就是undefined]
{
for(var j=0;j<arr[i].length;j++)
{
alert(arr[i][j]);
}
}
else
{
alert(arr[i]);
}
}
</script>

===但是,是字串时又要 考虑了因为 字串 有length属性!

推荐 不要弄复杂的数据 类型,

★用对象方式实现数组
说白了就是自己写一个 数组
[自己写个对象 加个length属性 加个访问方法]
<script language="javascript">
function MyArray()
{
this.length = arguments.length;
for(var i=0;i<this.length;i++)
{
this[i] = arguments[i];
}
}
//OK, a array has been made!
var str="";
var arr= new MyArray(4,2.4,"bbb");
for(var i=0;i<arr.length;i++)
{
str+=arr[i] +"\n";
}
alert(str);
</script>
-------------
[注意,这种方式写的数组并不真正的数组,看看下面的例子还要牛]
<script language="javascript">
function MyArray(size)
{
this.length = size;
for(var i=0;i<size;i++)
{
this[i] = "";
}
}
//OK, another array has been made!
//now use it
var arr = new MyArray(2);
arr[0] = 3;
arr[1] = "abc";
arr[2] = 2.3;

var x,str="";
for(x in arr)
{
// x will be the index and all field in MyArray
//如果用 数组列表, length 属性就不会出现了
str += x + " : " + arr[x] + "\n";
}
alert(str);
</script>
=============================

★Array对象
这个是 内部 提供的,有很多 方法 可以用,可以像list一样添加,排序什么的
他有三个重要 的构造函数:
1
Array()
没有任何参数,表示创建的数组的初始状态为0,要用要先添加
<script language="javascript">
var arr = new Array();
arr[0] = 'a';
arr[1] = 4;
</script>

2
Array(4) //表示长度,必须是 正整数

3
Array(2.3,"aaa",4)//这个就不说了
[只有一个正整数,JS认为是第二种]
最后,再看看sort方法!
<script language="javascript">
var arr = new Array();
arr[0] = 2.5;
arr[1] = "aa";
arr[2] = 1;
arr.sort();
var x, str="";
for(x in arr)
{
str += x + " : " + arr[x] + "\n";
}
alert(str);
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值