JavaScript--基于对象的脚本语言学习笔记(一)

1、两种嵌入js的方式

使用javascript前缀构建url:<a href="javascript:alert(‘运行JavaScript。。‘)">运行js</a>

js脚本放在<style></style>之间:

	<style type="text/javascript">
	alert("运行JavaScript。。")
	</script>

2、如果没有声明变量直接使用会报错:ReferenceError: x is not defined

如果声明了没有赋值,则该变量的值为undefined

3、单独保存js 文件

   <script src="test.js" type="text/javascript"></script>

4、3个强制类型转换的函数

toString()将布尔值、数值转换为字符串

parseInt()将字符串、布尔值转换为整数

parseFloat()将字符串、布尔值转换为浮点数

5、javascript的变量没有块范围,这一点和Java、C++等不同

6、如果用var来定义变量,程序会强制定义一个新变量。

尽管js是弱类型脚本语言,声明变量时无需指定变量的基本类型。但是js的值

保存到内存时也是有类型的。有5个基本类型。

7、Infinity、-Infinity与其他数值进行算术运算时,整个算式变成:NaN

两个Infinitiy是相等的

两个NaN不等

8、js中的复合类型

Object:对象

Array:数组

Function:函数

9、js中的数组元素类型并不要求相同,且数组长度可以任意变化

访问数组元素时不会产生数组越界,只会显示该元素的值为undefined

10、void强制指定表达式不会有返回值

11、

var a=[];
    for(var i=0;i<10;a[i++]=i+10);//利用空语句
    for(index in a){
	document.writeln(a[index]+"<br/>");
 }//index保存的是索引值

12、js支持自已定义错误,js只有一个异常类:Error,catch块类也无需声明异常的类

for(var i=0;i<10;i++){
    if(i>4) throw new Error("用户自定义错误");
    document.writeln(i+"<br/>");
}

13、使用with避免重复书写对象

    with(object){
statements
}

如:省写了document

with(document){
		 writeln( "hello<br/>");
		 writeln( "hello2<br/>");
		 writeln( "hello3<br/>");
	}

14、js的函数即是可重复调用的“程序块”,也是一个Function实例

推荐使用匿名函数

var f=function(parameter){
       函数体
    };

例子:

var a=function(){ alert("调用匿名函数")};
	a();  //函数调用

15、递归一定要向已知点追溯

★16、注意:js的函数不仅是一个函数,更是一个类,在定义js函数的同时也得到一个与该函数同名的类

该函数也是该类的唯一构造器。(定义一个函数的同时,实质上也定义了一个构造器,当定义函数时,

函数中以this修饰的变量是实例属性,如果某个属性值是函数时,即可认为该属性变成了方法)

因此有两种方式调用函数:

1.直接调用

2.用new 关键字调用,这样总会有返回值,返回值就是一个js对象

例:function Person(name,age){
		this.age=age;
		this.name=name;
		this.info=function(){
		document.writeln("我的名字是:"+this.name+"</br>");
		document.writeln("我的age是:"+this.age+"</br>");
		};

		}
		//创建p对象
		var p=new Person("周鹏程",24);
		p.info();
//Person类定义了一个方法,通过使用匿名函数使代码更加简洁

上面把js中定义的一个函数附加到某个对象上,作为该对象的方法

事实上,如果没有明确指定将函数“附加”到哪个对象上,该函数将“附加”到window对象上

17、js与Java不一样,它是一种动态语言,它允许随时为对象增加属性和方法

其实当我们直接为对象的某个属性赋值时,即视为给对象增加属性。

注意:JavaScript对象不能访问它所属类的类属性

如果直接定义一个全局变量,实际上这个变量会被“附加”到window对象上,作为window对象的实例属性

18、js中调用函数的3种方法

1.直接调用:以函数“附加”的对象作为调用者,在函数后括号内传入参数来调用函数

2.call()方法动态调用函数

例子:

var each=function(arr,fn){
			for(var s in arr){
				fn.call(null,s,arr[s]);
			}
		}
		each([4,20,3],function(a,b){
			document.writeln("数组的第"+a+"个元素是:"+b+"<br/>");
		}
		);
	//调用者.函数(参数1,参数2...)<=>函数.call(调用者,参数1,参数2...)

3.以apply()方法调用函数

通过call()调用函数时,必须在括号中详细地列出每个参数。

而通过apply()调用函数时,可以在括号中以arguments来代表所有参数

var myfun=function(a,b){
		alert("a="+a+"\nb="+b);
		}
		myfun(1,2);
		myfun.call(window,1,2);
		var fun2=function(num1,num2){
		    myfun.apply(this,arguments);
		}
		fun2(1,2);
		myfun.apply(window,[1,2]);//arguments来代表所有参数,arguments本质上是个数组

19、js中函数是“一等公民”,它永远是独立的,函数永远不会从属于其他类、对象

 function Person(name){
			 this.name=name;
			 this.info=function(){
				 alert("我的name是:"+this.name);
			 }
		 }
		 var per=new Person("zpc");
		 per.info();
		 var name="window的name";
		 per.info.call(window);
		//p.info()即可引用这个函数,可以使用call()方法指定调用者

20、js中可以使用空参数,没有传入实参的参数值将作为undefined处理。js中没有函数重载一说,函数名就是函数的唯一标识

函数名相同只会导致覆盖

    function test1(){alert("test1");}
    function test1(s){alert("test1"+s);}
    test1();//输出test1undefined

21、由于js是弱类型语言,函数定义的参数列表无需类型声明,这一点为函数调用埋下了隐患。

可以使用“鸭子类型”的理论改善这个问题:即在函数中先判断参数类型,并判断参数是否包含了需要访问的属性、方法,

当这些条件都满足时,程序才开始真正处理调用参数的属性、方法。

22、js对象的实质就是关联数组

例子:

    		function Person(name,age){
		this.age=age;
		this.name=name;
		this.info=function(){
		alert("info method!");
		}
		}
		var p=new Person("zpc",24);
		//alert(p[age]);
		alert(p['age']);//也能输出正确的年龄
		alert(p.age);
		for(proname in p){
		document.writeln("p对象的"+proname+"属性值为:"+p[proname]+"<br/>");
		}

23、尽量避免使用内嵌函数为类定义方法,而应该使用增加prototype属性的方式来增加方法。通过prototype属性来为类动态地

增加方法会让程序更加安全,性能更加稳定。js的所有类(也就是函数)都有一个prototype属性,当我们为JavaScript类的prototype

属性增加函数、属性时,则可视为对原有类的扩展。通过使用prototype属性可以对js的内建类进行扩展。

例子:

function Person(age,name){
		 this.name=name;
		 this.age=age;
		 this.info=function(){
			document.writeln("姓名:"+this.name+"</br>");
			document.writeln("年龄:"+this.age+"</br>");
		 }
		}

		var p1=new Person(23,"周鹏程");
		p1.info();
		//p1.walk();这里还没有给Person加walk方法
		//所有的Person实例共享一个walk方法,节约内存
		Person.prototype.walk=function(){
		document.writeln(this.name+"正在慢慢溜达。。<br/>");
		}
		document.writeln("<br/>");
		var p2=new Person(25,"鸟鹏");
		p2.info();
		p2.walk();
		p1.walk();

24、js中创建对象的3种方式:

1.使用new 关键字调用构造器创建对象,如上面的例子

2.使用Object直接创建对象

var per=new Object();
		per.name="鸟鹏";
		per.age=24;
		per["gender"]="男";//js允许动态添加属性,js对象的本质是关联数组
		document.writeln(per.name+"<br/>"+per.age+"<br/>"+per.gender);

js允许将一个已有的函数添加为对象的方法

例子:

var per=new Object();
		per.name="鸟鹏";
		per.age=24;
		function abc(){
		document.writeln("对象的name属性:"+this.name+"<br/>对象的age属性:"+this.age+"<br/>");
		}
		per.info=abc;//添加abc函数为per对象的方法
		per.info();

js通过new Function()方法来定义匿名函数,可以通过这种方式来为js对象增加方法

例子:

		var per=new Object();
		per.name="鸟鹏";
		per.age=24;
		per.info=new Function("document.writeln('对象的name属:'+this.name);'<br/>';document.writeln('对象的age属性:<span style="font-family: Arial, Helvetica, sans-serif;">'+this.age);");   </span><span style="font-family: Arial, Helvetica, sans-serif;">per.info();</span>

3.使用json语法创建对象

var p={
		name:"zpc",
		age:32
		};
		alert(p);
		//以上就是用json语法创建的p对象

		var person={
			name:"周鹏程",
			gender:'male',
			//属性值可以是任意的基本类型,甚至是json语法创建的对象
			son:{
			name:"鸟鹏",
			age:12
			},
			info:function(){
				document.writeln("姓名:"+this.name);
				document.writeln("gender:"+this.gender);
				document.writeln("son:"+this.son);
			}
		}
		person.info();
		//以上就是用json语法创建的person对象

		事实上json语法不仅仅可以用于创建对象,使用JSON语法创建数组也是非常常见的情形
		传统创建数组方式一:
		var a=new Array();
 		a[0]='zpc';
		a[1]='niao';
		传统创建数组方式二:
		var a=new Array('zpc','niao');

		使用JSON创建数组:
		var a=['zpc','niao'];

	//一个复杂的JSON对象
		var person={
			name:"周鹏程",
			age:24,
			//第三个属性是数组
			schools:['小学','中学','大学'],
			//第四个属性是对象数组
			parents:[
			  {
				name:'father',
				age:50,
				address:'shanghai'
			  },

			  {
				name:'mother',
				age:49,
				address:'nanjing'
			  }
			]
		};
		alert(person.parents);
		alert(person.parents[0].name);

	//事实上json已经发展成为一种轻量级的、跨语言的数据交换格式,成为了xml数据交换格式的有力竞争者

JavaScript--基于对象的脚本语言学习笔记(一)

时间: 2024-10-29 04:37:45

JavaScript--基于对象的脚本语言学习笔记(一)的相关文章

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r

InstallShield 脚本语言学习笔记

InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      1.变量      BOOL 布尔型 值为TRUE(1)或FALSE(0)      CHAR 字符型 一字节长的(8bit)的字符      HWND 窗口句柄 用来存放窗口句柄      INT 整型 两字节长的整数      LIST 列表型 指向InstallShield列表,用ListCr

TCL脚本语言学习笔记

关于历史记录的一些命令: history             显示之前所有命令的历史记录默认为20条,可通过history keep 40改成40条等. history redo 2 表示再次执行history中的第二条命令. !!                 重新执行上一条命令!event           重新执行event命令 ^old^new       取得上一命令,并将出现的所有old(字符串,不管是否是独立的单词)替换成new,然后执行,用于修改错误非常方便. histo

JavaScript基于对象编程

js面向对象特征介绍 javascript是一种面向(基于)对象的动态脚本语言,是一种基于对象(Object)和事件驱动(EventDirven)并具有安全性能的脚本语言.它具有面向对象语言所特有的各种特性,比如封装.继承及多态等.但对于大多数人说,我们只把javascript做为一个函数式语言,只把它用于一些简单的前端数据输入验证以及实现一些简单的页面动态效果等,我们没能完全把握动态语言的各种特性.在很多优秀的Ajax框架中,比如ExtJS.JQuery等,大量使用了javascript的面向

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

go语言学习笔记

go语言学习笔记 go语言学习笔记(初级) 最近一直在学习go语言,因此打算学习的时候能够记录 一下笔记.我这个人之前是从来没有记录笔记的习惯, 一直以来都是靠强大的记忆力去把一些要点记住. 读书的时候因为一直都是有一个很安静和很专心的环境, 因此很多事情都能记得很清楚,思考的很透彻.但是随着 年纪不断增加,也算是经历了很多的事情,加上工作有时会让人 特别烦闷,很难把心好好静下来去学习,去思考大自然的终极 奥秘,因此需要记录一些东西,这些东西一方面可以作为一种自我激励 的机制,另一方面,也算是自

R语言学习笔记2——绘图

R语言提供了非常强大的图形绘制功能.下面来看一个例子: > dose <- c(20, 30, 40, 45, 60)> drugA <- c(16, 20, 27, 40, 60)> drugB <- c(15, 18, 25, 31, 40) > plot(dose, drugA, type="b") > plot(dose, drugB, type="b") 该例中,我们引入了R语言中第一个绘图函数plot.pl

Go语言学习笔记(一) : 搭建Windows下的Go开发环境

最近突然对Go语言产生了兴趣,主要是因为在使用python的时候遇到了一些不爽的问题,然后发现了Go.Go是Google出的一个动态语言,语法和C++接近,性能也非常的好,而且还支持编译成exe发布,并且不依赖任何虚拟机(其实是打包在exe里面了),这种好语言怎么能够错过?所以便一时兴起,开始学习了起来.由于本人还处于异常小白的阶段,所以文章中可能不免有些错误,欢迎大家各种指正. 安装Go 前往Go语言的官方网站:http://golang.org/, 下载对应平台的安装包.如果是x86的系统可