java基础--笔记19

来源:互联网 发布:剑三喵姐妖娆捏脸数据 编辑:程序博客网 时间:2024/06/05 17:01

html   不区分大小写
href  在没有添加超链接协议时,显示的是当前路径

超链接解析:

定义了href属性值的超链接标签,可以链接一个资源。
资源的位置需要在href属性中指定。

同时该超链接具备了默认的事件。只要通过访问该链接就可以访问指定的资源。

注意:href的值解析:

如果值中没有指定任何协议 默认的是文件协议File,会将该值作为本地文件解析。

当指定了具体协议时,就启动具体协议的引擎(解析具体协议的应用程序)来解析协议后的内容。




表单 table
border 用于定义边框属性
Cellspacing  单元格间距,单元格之间的距离。
Cellpadding  单元格边距,单元格内容与其边框的空白。
caption 设置标题


定义表单时,需要给组件定义 name属性和value属性 为什么?
因为便于服务器端获取提交的数据。


GET提交和POST提交的区别。

1,地址是否显示。
GET提交的信息会显示在地址栏。
POST提交的信息不会显示在地址栏。

2,对于敏感信息。
GET对于敏感信息不安全。
POST对于敏感信息安全。
3,对于大体积数据。
GET提交的数据都存储在地址栏,地址栏存储的空间是有限的。
POST提交可以提交大体积数据,不受地址栏的限制。

综上所属,建议表单提交使用post。


问题1:表单做了校验,只有全部填写正确才可以提交,那么服务端收到数据,还需要校验吗?
需要校验,为了数据安全。

问题2:既然服务端做了校验,那么网页上还需要校验吗?
需要,减轻服务端压力,增强用户上网体验效果。

正则表达式:
     是一种专门用于操作字符串的规则
     通过一些符号来表示,简化对字符串的复杂操作
弊端:阅读性差。


JS  javascript
js代码需要写在script标签中,要求大家必须填写type属性。

js与html代码融合的三种方式
1,js代码可以放置在html中的开始和结束标记成对出现的标签之中,title标签除外,还可以放在页面的开头和结尾。
2,通过script的src属性引入外部js文件。
     当标签中引入外部js文件时,标签内部的js代码会被外部的js文件中的代码替换掉。通过firedebug可以查看原因。因此,当标签中存在引用外部js文件时,需要运行的代码就应该写在引用的那个文件中。
而且,外部的js文件中,编写的脚本不需要附加script标签。
注意:外部js文件的编码格式要与引用该文件的html文件的编码格式一致。
3,在a标签的href属性里面编写js代码     (超链接)。

变量:
1,js中采用var关键字来声明变量,无论什么类型。
2,一次声明,可以给定任意类型的值,类型可以切换。
3,可以直接不通过var关键字声明的变量赋值。
4,当我们使用未赋值的变量时,值为undefined(未定义)。
5,没有通过var声明也没有赋值的符号,系统不认识,直接使用会报错。

数据类型:
基本数据类型:   栈中
数字number  字符串string  布尔值boolean  空值null  未指undefined

引用数据类型:    堆中
函数 function      对象 object

1,数字
特殊值  NaN 非法数字
在做运算或比较的时候,自动类型转换。

2,字符串
没有字符的概念,单引号中也是字符串。双引号中可以嵌套单引号,单引号中也能嵌套双引号。

3,布尔值:
在js中,除了布尔类型的值可以表示真假,其他类型的值也可以表示真假。其中:false,null,undefined,NaN,“”,0表示假,其他的一切都表示真。

4,null 和undefined 
null 表示值是一个无效的对象,必须赋值。
undefined 1,变量为赋值 2,访问对象不存在的属性的时候

算术运算符:
+ :两个意义
当遇到字符串时,是字符串连接符。
当两边是数字,或者能够转换成数字的数据时,变成算术运算符。
true转换为1 ,false转换为0 ,null转换为0,null和undefined无法转换成数字。

其他运算符:
js运算时,结果和现实生活中的一致,原因是js是弱类型的语句。
var result = 3140/1000*1000;
alert(result); //3140

比较运算符:
==  由于在js中==写成=不会报错,但结果不一样,为了避免,可将值写在前面,变量写在后面。
js中任意两个类型的值都可以用==来比较。

逻辑运算符:
&& 运算机制
     从第一个参与逻辑运算的元素开始找,找表示假的值,当找不到的时候,返回最后一个值。

|| 运算机制
     从第一个参与逻辑运算的元素开始找,找表示真的值,当找不到的时候,返回最后一个值。

! 通过两次非,可以把一个值转换成与该值所表示意义相同的布尔类型的值。

typeof :能够返回给定值的数据类型的名称,得到的是一个字符串。
null本应该是null类型,但是js将其划成了object类型。

instanceof:用来判断一个对象,是否是某个类的实例,运算结果是boolean。

条件语句
if,除布尔值以外,其他类型的值也可以参与逻辑判断。
为了避免双等号==忘写的情况,把值放到前面把变量放在后面。

循环语句:
for,java程序员常犯错误,表现为声明变量时用int,而且firedbug给出的错误是不对的。
SyntaxError:missng ;after for-loop initializer

函数:
定义函数:通过function关键字声明
作用:封装代码,可以反复调用,控制代码的执行时机。
参数:无需任何关键字声明,直接写参数名。
返回值:通过return返回,如果没有通过return关键字明确指定返回值,那么函数默认的会返回一个undefined。

函数没有重载
可变参,在实际调用函数时,可以不按照函数定义的参数给定,这时函数内定义的参数值为undefined。
当两个参数都没有给定时,都为undefined,这两个参数相加为NaN。也就是输两个undefined类型的相加为NaN。

函数作为参数传递时,不能加()。
console.debug(x);讲x输出到firedebug控制台

function myFn(arg1,arg2){
alert(arg1+arg2)
}
myFn();//由于js中没有重载,所以在内存中myFn先指向无参的Function,之后指向有参的。
//当调用时,由于没有传递参数,所以arg1和arg2为undefined,
//两个undefined相加为NaN
myFn(9,9);

全局变量和局部变量
一个js文件中,多个script标签在内存中是同一个区域。
在script标签内,函数外定义的变量在整个区域都有效,称之为全局变量。
当在函数内给没有声明的变量直接赋值时,该变量是全局变量。
在函数内声明的变量,只在函数内部有效,称之为局部变量。

数组: 用于存储数据。

有两种定义方式:
var arr = new Array();
var arr = [];

1,js中数组的长度是可变的,可以直接通过给定下标的方式填充数据。
2,js数组中可以同时存储任意类型的数据。
3,js中数组的长度,按照给定的最大的下标数+1,通过length属性可以更改数组的长度。
4,可以在定义时给定初始值。例如:var arr = new Array(10);当只有一个参数,并且这个参数是数字的时候,就代表数组的长度,如果不是数字就代表初始值。当代表长度时,其中元素为undefined。

数组的join方法,是用来将数组中的字符串连接起来的。

 面向对象:
 类,用来描述和创建对象,js中类就是一个函数.当这个函数用来描述和创建对象时就称之为类.
定义类的时候用function,类首字母大写,虽然小写没问题,但是我们一定要大写.
js中对象可以理解为,键值对的集合.属性和方法封装到对象的内存之中.

给对象扩展属性:
 1.通过对象.属性名=属性值的方式扩展属性.
 2.当一个属性指向的是一个函数的时候,这个属性称之为这个对象的方法
 两种方式通用.

 p.name="张三";//通过对象.属性名=属性值的方式扩展属性.
 p["age"]=18;//通过对象["属性名"]=属性值的方式扩展属性.

当创建对象时,构造函数执行,因此把给对象扩展属性和方法的代码封装到构造函数中 
通过对象的constructor属性得到对象的构造函数.
类本身就是构造函数.
this表示当前创建的对象.

//--定义类---
 function Person(name,age){
this.name=name;
this.age=age;
this.say=function(){
alert("在说话");
}
 }
 
 var p=new Person("张三",18);//创建一个对象.
 console.debug(p);
 alert(p.say());//->☆☆☆☆var result=p.say();alert(result);
 
 var ls=new Person("李四",28);
 ls.say=function(){
alert("说英语");
 }
 console.debug(ls);

类的原型对象 prototype (基因)
原型对象是类的一个属性.因为类是函数,函数是对象,因此类也可以拥有属性.
当我们定义一个类的时候,内存中会自动创建一个该类的实例,这个实例没有任何的属性和方法,作为该类的prototype属性而存在.
 
对象中有个隐藏的指针__proto__,该指针指向的是原型对象.只读,无法修改原型对象中的属性值,只有类才能修改原型对象属性值.我们可以给新创建的对象扩展一个与原型对象同名的属性或方法,一旦同名后,对象就不会访问原型对象中同名的属性和方法而是利用自己已有的同名的属性和方法.该扩展的内容会追加到对象的内存中.
 
我们通过原型对象扩展的,对象原来没有的属性和方法时,那么,该类创建出来的实例,也可以访问给原型对象添加的这些属性和方法

原型对象和构造函数的区别
构造函数中用来给对象扩展,个性化的属性和方法.因为这些个性化属性和方法可以作为构造函数的参数.
 
类的原型对象中定义的属性和方法,对于类创建出来的对象值是一样的.所以不适合用来扩展对象的个性化的属性和方法,而适合扩展所有对象公有的属性和方法.

 Math :
注释:Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。


  接下来,我们一起来看以下代码,判断执行结果:
<script type="text/javascript">
var arg1="a";
function myFn(){
arg1="b";
var arg1="c"
}
alert(arg1);//弹出a
</script>
答案:结果是弹出a。相信这个结果让很多人咋舌,彻底无语了吧。这就是js中的就近原则。虽然arg1在函数体内的声明在后,可是对于整个函数来说,只要你声明了与全局同名的参数,那么对于整个函数而言,都视为对局部变量的操作。


DOM
document object modal   文档对象模型
dom本质:是一个标准,定义了如何将标记型文档xml,html 解析成对象,hi定义了如何访问这些对象。

谁来按照dom标准来解析标记型文档? 浏览器.
按照dom标准,怎么解析的?
 1.首先解析器将整个文档转换成一个对象.document对象,这个对象处在最顶层.
 2.按照从上到下的顺序,并且按照标签的层次关系,逐一的对每一个标签,标签属性,标签内包含的文档转换成对象.
 3.被转换成的对象,称之为节点.
 4.处在上层的节点的称之为父节点,处在下级的节点称之为子节点,父子关系不能跨级.有同一个父节点的子节点称之为兄弟节点.
 5.将文本解析成的节点,称之为文本节点;将标签解析成的节点称之为元素节点.标签属性解析成的节点称之为属性节点
 6.文本节点和属性节点不可能成为父节点,只有元素节点才能成为父节点.
 
按照标准把文档解析成对象,意义是什么?
可以通过控制对象的属性来达到动态前端的效果.
动态前端->dhtml 
是个技术集合:html + css + javascript + dom
html:提供标签,对网页结构进行封装
css:提供样式.
javascript:控制对象行为
dom:定义对象.

dom学习指南:
1.如何去得到自己想要操作的对象.document对象最清楚,它是整个dom编程的核心,切入点.通过该对象的属性和方法,我们就能够达到目的.
  2.如何去操作自己想要得到的对象.重点在于,这些对象都有那些属性和方法.
总结为两点就是,获取对象和操作对象。

forms集合
 js中任何一种类型的集合,都只能看作是只读的数组.
 而且这些集合都是js底层自动生成的,我们无法自己手动创建.
 因此数组是js中唯一的容器(编程角度).


document对象获得元素的三个方法
getElementById 获取对 ID 标签属性为指定值的第一个对象的引用。 
在一个页面中,要保证id属性的值唯一,因为id本身代表的是唯一标识符.
getElementsByName 根据 NAME 标签属性的值获取对象的集合。 
  单选,多选.
getElementsByTagName 获取基于指定元素名称的对象集合。 


如何操作对象
节点的层次关系:
父节点:parentNode
子节点:
childNodes子节点集合
firstChild:第一个子节点
lastChild:最后一个子节点.
hasChildNodes(),判断是否有子节点.布尔值
兄弟节点:
previousSibling:获得自己的上一个兄弟节点.(哥哥)
当前节点如果不包含上一级兄弟节点则返回null
nextSibling:获得自己的下一个兄弟节点(弟弟).
当前节点如果不包含下一级兄弟节点则返回null
 
节点操作的角度:
创建一个节点:createElement(标签名);
document对象专有的方法.
插入/移动一个子节点:
appendChild(newNode);
☆☆☆☆☆当前方法要通过父节点来调用,
节点自身是没有办法操作自己的.
该方法将新节点添加到最后的位置,或者将原有节点移动到最后的位置.
insertBefore(newNode,refNode);
将节点插入或者移动到指定的节点的前面,第一个参数表示要插入或移动的节点
第二个参数,放在谁前面就是谁.
 
删除子节点:
removeChild(delNode);//删除指定的子节点.
替换子节点:
replaceChild(newNode,oldNode);//用newNode来替换oldNode.
被替换的节点将不再是父节点的子节点.
修改节点:
setAttribute("标签属性名",标签属性值);
当调用该方法时,如果被操作的元素 不包含指定的那个的标签属性,那么自动添加一个标签属性.
节点信息的角度:
nodeType:得到节点类型,元素节点 1,属性节点2,文本节点3.
//--以下了解即可---
nodeName:节点的名称.元素节点标签名,属性节点属性名,文本节点#text
nodeValue:节点值.元素节点 null,属性节点属性值,文本节点文本内容.
0 0