JavaScript讲义(二)

语句:
-----------------------------------
基本执行单位,所有语句都以分号结束
with语句可以避免重复输入,比如
with(document)
{
writeln("a");
writeln("b");
writeln("c");
}

流程控制:
-----------------------------------
分支:
循环
for,while,do while
for in:本质是一种foreach循环,遍历数组元素和遍历JS对象所有属性。比如:
for(propName in navigator)
{
document.write(propName+‘:‘+navigator[propName]);

函数:
-----------------------------------
一等公民,函数本身是一个对象,其完全可以作为一个类使用。
定义命名函数
定义匿名函数:
function(poarameter list)
{
};
//这种函数定义无须指定函数名,将参数列表紧跟function关键字。最后紧跟分号
使用Function类匿名函数:
该类可用于定义函数,比如
var f = new Function(‘name‘,"document.writeln(‘adaf<br>‘);");
上面代码用new Function()定义了一个匿名函数,将该匿名函数赋给f变量,从而通过f访问匿名函数。最后一个字符串代表函数执行体。

局部函数:外部不能访问

函数的实例属性和类属性:函数不仅是函数,而且是类,该函数还是此类唯一的构造器。函数中的变量有3种:
局部变量:普通方式声明
实例属性:在函数中以this前缀修饰的变量。
类属性:在函数中以函数名前缀修饰的变量。
实例属性(this前缀修饰)必须通过对象访问,类属性(函数名前缀)必须通过类(也就是函数)访问。比如,
function Person(national,age)
{
this.age=age;
Person.national=national;
var bb=0;
}
JS与java不一样,它是一种动态语言,允许随时为对象增加属性和方法。当我们直接为对象的某个属性赋值时,即可视为给对象增加属性。

调用函数的3种方式:
直接调用:比如window.alert("sdfafs");
以call()调用:其语法格式为函数引用.call(调用者,arg1,arg2...)。
以apply()调用:与call()区别在通过call()调用函数时,必须详细列出每个参数,而apply()可以在括号中以arguments代表所有参数。
比如
myfun.call(window,12,23);
myfun.apply(this,arguments);

函数的独立性:因为是一等公民,它不从属于任何对象和类。

函数的参数处理
-----------------------------------------------------------
JS函数的参数传递全部采用值传递方式,当通过实参调用函数时,传入函数里的并不是实参本身,而是实参的副本。
对于复合类型的参数,实际上依然采用值传递,只是很容易混淆。
function changeAge(person)
{
person.age=10;
person=null;
}
var person={age:5};
changeAge(person);
上面的关键是,复合类型的变量本身并未持有对象本身,复合类型的变量只是一个引用,该引用指向实际的javaScript对象。当把person复合类型的变量传入changeAge()时,传入的依然是person变量的副本,只是该副本和原person变量指向同一个JS对象。

空参数:没有任何程序问题,只是传入实参的参数值将作为undefined处理。

参数类型:参数列表无须类型声明,这一点为函数调用埋下了隐患。比如:
function changeAge(p)
{
p.setAge(34);
}
传入p完全可以是整形/布尔型变量,这些类型的数据都没有setAge()方法,但程序强制调用该方法,肯定导致程序出错。所以JS不如Java,C语言程序健壮。
为了解决弱类型语言这种问题,Duck Type被提出。先判断入参对象是否能发出嘎嘎声,并具有走路左右摇摆的特征,程序可以把它当成鸭子使用。如果弱类型语言的函数需要接受参数,则应先判断参数类型,并判断参数是否包含了需要访问的属性、方法。

使用对象
----------------------------------------------------
为了更好的软件复用,建议使用对象和函数
JS不允许指定类与类之间的继承关系,所有类都是Object的子类。

对象和关联数组:JS对象与纯粹的面向对象语言的对象存在区别,JS对象本质是一个关联数组,或者更像Java里的Map数据结构,由一组key-value对组成。与Java中Map对象的区别是,JS对象的value不仅可以是值也可是函数,此时函数就是该对象的方法;当vvalue是基本类型或复合类型的值时,此时的value是该对象的属性值。当需要访问某个对象的属性时,不仅可以obj.propName,也可以obj[propName],有时甚至必须用这种形式。比如
for(propName in p)
{
document.writeln(propName+":"+p[propName]);
}
遍历了Person对象的每个属性,因为遍历每个属性时循环计数器是Person对象的属性名,因此程序必须根据属性名来访问,此时不能用p.propName,因为JS不会把propName当成变量处理,它试图直接访问该对象的propName属性,但该属性实际并不存在。

创建对象
----------------------------------------------------
JS对象只是一种特殊的关联数组。创建对象有3种方式:
用new调用构造器,比如var p1=new Person();
用Object直接创建对象,比如var myObj=new Object();myObj.name=‘sfsf‘;
用JSON语法创建对象:
JSON已经发展成一种轻量级的,跨语言的数据交换格式。用JSON语法可以避免书写函数,也可避免用new,可以直接创建一个JS对象。
比如var p={"name":‘sdfsfs‘,"gender":‘sdfsdf‘
};

时间: 2024-08-08 10:38:26

JavaScript讲义(二)的相关文章

初探JavaScript(二)——JS如何动态操控HTML

除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次接触JS,没有必要花费过多时间去钻死胡同,先混个脸熟,以后再来拜访也未尝不可嘛.就这样,踉踉跄跄.囫囵吞枣似的已经过五关斩六将,到达第十一章. 书中有几个章节并没有从语法.技术等层面介绍JavaScript,而是站在一个全局的角度,立足编程原则和习惯道破了我们该如何看待和使用这门语言,主要有以下几点: Jav

Head first javascript(二)

three basic data types text number boolean 变量 var var_name; 用'='初始化变量 var var_name = ini_value; const (不是所有浏览器都支持const) const const_name = ini_value; nan: not a number 使用一些未初始化的变量进行计算的时候会产生nan,如: const unknown; total = (1 + 2) * unknown; 这里total在计算的时

[连载]JavaScript讲义(03)--- JavaScript面向对象编程

[连载]JavaScript讲义(03)--- JavaScript面向对象编程,布布扣,bubuko.com

[连载]JavaScript讲义(04)--- 函数和闭包

点击下载该例子的源代码 [连载]JavaScript讲义(04)--- 函数和闭包,布布扣,bubuko.com

Ext JS学习第三天 我们所熟悉的javascript(二)

•javascript之函数 •对于Ext开发者,我还是希望你能对javascript原生的东西非常了解.甚至熟练掌握运用.那么函数,无疑是非常重要的概念.首先在前面一讲,我们知道了函数也是一种数据类型,创建函数一共有三种方式.每种方式他们都会有区别,分别为: –function语句形式 –函数直接量形式 –构造函数形式 •函数中的arguments对象 –argument的作用一:接受函数的实际参数 –argument的作用二:用于做递归操作 栗子代码 1 //Function 函数 2 //

Javascript生成二维码(QR)

网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网站,虽然有服务器端缓存,毕竟需要大量的CPU运算时间,这或多或少也是很大的一块压力.所以就想,有没有一种不靠服务器,就只靠JS就生成二维码呢,毕竟二维码就是一堆黑白点而已.我也没有刻意去找网络上是否已经存在这样的解决方案,而且自己一直想深入分析二维码的生成细节,现有的项目也有这样的需求,于是我自己研

javaScript生成二维码(改造jquery.qrcode.js,使之支持中文,能带logo)

最近公司要求使用javaScript生成二维码,在网上搜了很多相关的资料,都不是很全面,俗话说:自己动手,丰衣足食. (这里吐槽下,有网友有了解决方案,却刻意把源代码压缩了,导致不知道改了什么东西,知识大家一起学习嘛,授人与鱼不如授人与渔!) 总结如下: 资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrcode.js,支持中文. 支持中文 1 //q

向ES6看齐,用更好的JavaScript(二)

向ES6看齐,用更好的JavaScript(二) 上一篇 中介绍了关于变量部分的新特性,本篇将从现有对象的拓展来展开介绍 1 增加了模板字符串 先看一下,ES6之前我们是如何实现输出模板的: document.getElementById('root').innerHTML = "the user name is " + username + "\nthe user age is " + age; 这样通过字符串相加拼接确实挺繁琐的,很容易出错,ES6引入了模板字符

[连载]JavaScript讲义(06)--- 浏览器对象模型

[连载]JavaScript讲义(06)--- 浏览器对象模型