JavaScript程序不需要我们程序员手动编译,编写完源代码之后,浏览器直接打开解释执行。
JavaScript的“目标程序”以普通文本形式保存,这种语言都叫做“脚本语言”。
Java的目标程序已.class形式存在,不能使用文本编辑器打开,不是脚本语言。
完整的JavaScript由语言基础,BOM,DOM组成
ECMAScript:JS的核心语法(ES规范 / ECMA-262标准)
DOM:Document Object Model(文档对象模型:对网页当中的节点进行增删改的过程。)HTML文档被当做一棵DOM树来看待。
var domObj = document.getElementById("id");
BOM:Browser Object Model(浏览器对象模型)
关闭浏览器窗口、打开一个新的浏览器窗口、后退、前进、浏览器地址栏上的地址等,都是BOM编程
应用案例
script标签javascript代码必须放在script标签中,用户点击以下按钮,弹出消息框
<input type="button" value="hello" onclick="window.alert('hello js')"/>
<input type="button" value="hello" onclick='window.alert("hello jscode")'/>
alert弹窗中window可以省略
<input type="button" value="hello" onclick='alert("hello jscode")'/>
完整示列代码:
doctype html>
<html>
<head>
<title>HTML中嵌入JS代码的第一种方式title>
head>
<body>
<input type="button" value="hello" onclick="window.alert('hello js')"/>
<input type="button" value="hello" onclick='window.alert("hello jscode")'/>
<input type="button" value="hello" onclick="window.alert('hello zhangsan')
window.alert('hello lis')
window.alert('hello wangwu')"/>
<input type="button" value="hello" onclick="alert('hello zhangsan')
alert('hello lis')
alert('hello wangwu')"/>
body>
html>
通过脚本块的方式,页面打开的时候执行,并且遵守自上而下的顺序依次逐行执行。(这个代码的执行不需要事件)。(CSS为样式块)
脚本块的格式为script
<script type="text/javascript">
window.alert("first.......");
script>
完整代码如下
<script type="text/javascript">
window.alert("first.......");
script>
doctype html>
<html>
<head>
<title>HTML中嵌入JS代码的第二种方式title>
<script type="text/javascript">
window.alert("head............");
script>
head>
<body>
<input type="button" value="我是一个按钮对象1" />
<script type="text/javascript">
window.alert("Hello World!"); // alert函数会阻塞整个HTML页面的加载。
script>
<input type="button" value="我是一个按钮对象" />
body>
html>
完整代码如下
doctype html>
<html>
<head>
<title>HTML中嵌入JS代码的第三种方式:引入外部独立的js文件。title>
head>
<body>
<script type="text/javascript" src="js/1.js">
// 这里写的代码不会执行。
// window.alert("Test");
script>
<script type="text/javascript">
alert("hello jack!");
script>
body>
html>
js文件
window.alert("hello js!");
window.alert("hello js!");
window.alert("hello js!");
var i = 100;
i = false;
i = "abc";
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>关于JS中的变量title>
head>
<body>
<script type="text/javascript">
var a, b, c = 200;
alert("a = " + a);
alert("b = " + b);
alert("c = " + c);
a = false;
alert(a);
a = "abc";
alert(a);
a = 1.2;
alert(a);
script>
body>
html>
JS函数类似Java中的方法
Java中定义方法的格式是
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
public static boolean login(String username,String password){
...
return true;
}
boolean loginSuccess = login("admin","123");
JS是一种弱类型,JS中的函数不需要指定返回值类型,返回什么类型都行
函数的定义格式是
//第一种方式: function 函数名(形式参数列表){ 函数体; } //第二种方式: 函数名 = function(形式参数列表){ 函数体; }
例如函数
function sum(a, b){
// a和b都是局部变量,他们都是形参(a和b都是变量名,变量名随意。)
alert(a + b);
}
sum(10,20);//函数必须调用才能执行
//或者第二个格式
// 定义函数sayHello
sayHello = function(username){
alert("hello " + username);
}
// 调用函数
sayHello("zhangsan");
配合单击按钮框的逻辑完整代码如下
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS函数初步title>
head>
<body>
<script type="text/javascript">
function sum(a, b){
// a和b都是局部变量,他们都是形参(a和b都是变量名,变量名随意。)
alert(a + b);
}
sayHello = function(username){
alert("hello " + username);
}
// 调用函数
sayHello("zhangsan");
script>
<input type="button" value="hello" onclick="sayHello('jack');" />
<input type="button" value="计算10和20的求和" onclick="sum(10, 20);" />
body>
html>
重载的含义是:方法名或者函数名一样,形参不同(个数、类型、顺序)
完整代码如下:
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS函数初步title>
head>
<body>
<script type="text/javascript">
function sum(a, b){
return a + b;
}
// 调用函数sum
var retValue = sum(1, 2);
alert(retValue);
var retValue2 = sum("jack"); // jack赋值给a变量,b变量没有赋值系统默认赋值undefined
alert(retValue2); // jackundefined
var retValue3 = sum();
alert(retValue3); // NaN (NaN是一个具体存在的值,该值表示不是数字。Not a Number)
var retValue4 = sum(1, 2, 3);
alert("结果=" + retValue4); // 结果=3
function test1(username){
alert("test1");
}
/*
在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声明的同名函数覆盖。
*/
function test1(){
alert("test1 test1");
}
test1("lisi"); // 这个调用的是第二个test1()函数.
script>
body>
html>
演示代码
// 全局变量
var username = "jack";
function accessUsername(){
// 局部变量
var username = "lisi";
// 就近原则:访问局部变量
alert("username = " + username);
}
// 调用函数
accessUsername();
// 访问全局变量
alert("username = " + username);
先输出lisi后输出jack
因为局部变量结束后便释放了,所以局部变量没有值
而如果单纯没有定义全局变量,全在全局中输出局部变量那会报错
function accessAge(){
var age = 20;
alert("年龄 = " + age);
}
accessAge();
// 报错(语法不对)
alert("age = " + age);
如果一个变量在声明的时候没有定义var,默认是全局变量(即使在局部变量中声明)
// 以下语法是很奇怪的.
function myfun(){
// 当一个变量声明的时候没有使用var关键字,那么不管这个变量是在哪里声明的,都是全局变量.
myname = "dujubin";
}
// 访问函数
myfun();
alert("myname = " + myname); // myname = dujubin