在 JavaScript 中, 对象和函数同样也是变量。
变量在函数内声明,变量为局部作用域。
局部变量在函数开始执行时创建,函数执行完后局部变量会自动销毁。
变量在函数外定义,即为全局变量。
全局变量有 全局作用域: 网页中所有脚本和函数均可使用。
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
局部变量在函数执行完毕后销毁。
全局变量在页面关闭后销毁。
在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
在 DOM 中查找 HTML 元素的最简单的方法,是通过使用元素的 id。
var x=document.getElementById("intro");
通过标签名查找 HTML 元素
例子,查找 id="main" 的元素,然后查找 id="main" 元素中的所有 <p> 元素:
var x=document.getElementById("main");
var y=x.getElementsByTagName("p");
通过类名找到 HTML 元素
例子,通过 getElementsByClassName 函数来查找 class="intro" 的元素:
var x=document.getElementsByClassName("intro");
JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型。
Webkit是浏览器引擎,包括html渲染和js解析功能。
NaN,即非数值(Not a Number),是一个特殊的数值,用于表示一个本来要返回数值的操作数未返回数值的情况。
数值转换,Number(),可以用于任何数据类型。
parseInt(),将字符串转换成数值。
parseFloat(),将字符串转换成数值。
转换为字符串,toString(),数值、布尔值、对象和字符串都有一个toString()方法,null和undefined值没有这个方法。
Object是一组数据和功能的集合;通过new关键字创建;
var o = new Object();
js 判断字符串中是否包含某个字符串,可以有三种方法;
String对象的方法,indexOf(),search(),match();一般用第一种;
var str = "123";
console.log(str.indexOf("3") != -1 ); // true
========
通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。
在 JavaScript 中,document.write() 可用于直接向 HTML 输出流写内容。
不要在文档加载完成之后使用 document.write()。这会覆盖该文档。
修改 HTML 内容的最简单的方法是使用 innerHTML 属性。
改变<p>元素的内容:
<p id="p1">Hello World!</p>
<script>
document.getElementById("p1").innerHTML="New text!";
</script>
改变<h1> 元素的内容:
<h1 id="header">Old Header</h1>
<script>
var element=document.getElementById("header");
element.innerHTML="New Header";
</script>
改变 HTML 属性
document.getElementById(id).attribute=new value
改变<img> 元素的 src 属性:
<img id="image" src="smiley.gif">
<script>
document.getElementById("image").src="landscape.jpg";
</script>
改变HTML元素的样式
document.getElementById(id).style.property=new style
改变 <p> 元素的样式:
<p id="p2">Hello World!</p>
<script>
document.getElementById("p2").style.color="blue";
</script>
改变id="id1" 的 HTML 元素的样式,当用户点击按钮时
<h1 id="id1">My Heading 1</h1>
<button type="button"
οnclick="document.getElementById('id1').style.color='red'">
Click Me!</button>
HTML 事件:
当用户点击鼠标时
当网页已加载时
当图像已加载时
当鼠标移动到元素上时
当输入字段被改变时
当提交 HTML 表单时
当用户触发按键时
在 <h1> 元素上点击时,改变其内容:
<h1 οnclick="this.innerHTML='Ooops!'">点击文本!</h1>
从事件处理器调用一个函数:
<script>
function changetext(id)
{
id.innerHTML="Ooops!";
}
</script>
<body>
<h1 οnclick="changetext(this)">Click on this text!</h1>
</body>
向 button 元素分配 onclick 事件:
<button οnclick="displayDate()">点我</button>
允许使用 JavaScript 来向 HTML 元素分配事件:
向 button 元素分配 onclick 事件:
document.getElementById("myBtn").οnclick=function(){displayDate()};
onload 和 onunload 事件会在用户进入或离开页面时被触发。
onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。
onload 和 onunload 事件可用于处理 cookie。
<body οnlοad="checkCookies()">
onchange 事件常结合对输入字段的验证来使用。
当用户改变输入字段的内容时,调用 upperCase() 函数:
<input type="text" id="fname" οnchange="upperCase()">
onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数。
onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件,当完成鼠标点击时,会触发 onclick 事件。
addEventListener() 方法用于向指定元素添加事件句柄。
addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。
你可以向一个元素添加多个事件句柄。
事件冒泡或事件捕获
事件传递有两种方式:冒泡与捕获。
事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?
在冒泡中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。
在捕获中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。
addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型。
========
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数。
JavaScript 允许自定义对象。
JavaScript 提供多个内建对象,如 String、Date、Array等。
对象只是带有属性和方法的特殊数据类型。
属性是与对象相关的值。
访问对象属性的语法:objectName.propertyName
使用 String 对象的 length 属性来获得字符串的长度:
var message="Hello World!";
var x=message.length;
方法是能够在对象上执行的动作。
可以通过以下语法来调用方法:
objectName.methodName()
使用 String 对象的 toUpperCase() 方法来将文本转换为大写:
var message="Hello world!";
var x=message.toUpperCase();
通过 JavaScript,能够定义并创建自己的对象。
创建新对象有两种不同的方法:
定义并创建对象的实例
使用函数来定义对象,然后创建新的对象实例
创建对象的一个新实例,并向其添加四个属性:
person=new Object();
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";
替代语法(使用对象 literals):
person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};
使用对象构造器
使用函数来构造对象:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
创建 JavaScript 对象实例
一旦有了对象构造器,就可以创建新的对象实例,
var myFather=new person("Bill","Gates",56,"blue");
var myMother=new person("Steve","Jobs",48,"green");
可以通过为对象赋值,向已有对象添加新属性:
假设 personObj 已存在 - 可以为其添加这些新属性:firstname、lastname、age 以及 eyecolor:
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";
x=person.firstname;
把方法添加到 JavaScript 对象
方法只不过是附加在对象上的函数。
在构造器函数内部定义对象的方法:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
changeName() 函数 name 的值赋给 person 的 lastname 属性。
现在可以试一下:
myMother.changeName("Ballmer");
JavaScript 类
JavaScript 是面向对象的语言,但 JavaScript 不使用类。
在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。
JavaScript 基于 prototype,而不是基于类的。
JavaScript for...in 循环
JavaScript for...in 语句循环遍历对象的属性。
语法
for (对象中的变量)
{
要执行的代码
}
for...in 循环中的代码块将针对每个属性执行一次。
循环遍历对象的属性:
var person={fname:"Bill",lname:"Gates",age:56};
for (x in person)
{
txt=txt + person[x];
}
========