一将javascrip添加到网页的三种方法:
- 将javascript代码写道一个单独的文件中,再将这个文件通过script标签嵌入到HTML文件中
<script type="text/javascript" src="script.js">
2.直接将javascript代码写道HTML文档中的script标签中
<script>
//在这里编写javascript代码
</script>
二 javascript的组成:
1.核心,描述了在该语言的语法,类型,语句,关键字等基本内容;
2.BOM,浏览器对象模型描述了浏览器进行交互的方法和接口。
3.DOM,文档对象模型是HTML和XML的应用程序的接口描述了访问网页元素的方法。
三 变量:
- 变量名可以由大小写字母、下划线(_)、美元符号($)、数字组成,但数字不能位于开头位置
- 变量名大小写敏感,hello、Hello、HELLO是三个不同的变量。
var a = 100, b = 'hello'; //变量a的值是数字,变量b的值是字符串
-
已经声明但尚未初始化的变量,它的值是一个特殊值:undefined
-
没有用var声明过的变量名也可以直接使用,会被当作全局变量
-
用==比较两个变量的值是否相等
-
用===比较两个变量的值和类型是否都相等
-
使用typeof会返回变量类型
三 数据类型:
- 字符串: var a = '这是一个字符串,值的两端用单引号或双引号均可,规范要求统一都用单引号';
var b = "用双引号也是符合语法的"; //最好使用单引号。
var i = g + h; //字符串可以用加号+连接
字符串的长度用.length属性获取
//JavaScript中的字符串以Unicode格式保存
//任何单个字符的长度都是1,不区分全角还是半角
2.数字(Number):
JavaScript不区分整数类型和浮点数类型,它只有一种数字类型,可以保存任意数字。
JavaScript始终以浮点数进行运算,不需要特意写成100.0
有时可能会出现浮点运算精度问题,必要时可用Math.round()四舍五入
var d = 0123; //0开头的数字被当作8进制,0123是十进制的83
var e = 0x123; //0x开头的数字被当作16进制,0x123是十进制的291
alert(1/0); //结果是数字类型的一个特殊值Infinity,代表无穷大
alert(1/0 == Infinity); //结果是true
var f = parseInt('123'); //字符串转成整数,结果是数字类型的123
var g = parseInt('123.4') //结果仍是数字123,parseInt()只保留整数部分
var h = parseFloat('123.4') //结果是数字123.4,parseFloat()是字符串转浮点数
var i = 123.4 + ''; //结果是字符串'123.4',数字转字符串只需要加个空字符串
alert(parseInt('xxx')); //结果是另一个数字类型的特殊值NaN,代表不是数字
alert(parseInt('xxx') == NaN); //结果是false,NaN跟自己不相等,不能用==比较
alert(isNaN(parseInt('xxx'))); //结果是true,isNaN()是判断NaN值的专用函数
3.布尔型:
var a = true, b = false; //布尔型只有两个值:true和false
var x = 7 ; var e = !!x; //e = true,数字转布尔型(0转为false,非0数字转为true)
var h = b + ''; //h = 'false',布尔型转字符串(结果是字符串'true'或'false')
4.null
var a = null; //此类型只有一个特殊值:null,代表不存在的对象(空对象指针
5.未定义(Undefined)
var a = undefined; //这个类型也只有一个特殊值:undefined,代表未定义
var b; //当一个变量声明后未赋值过,它的值是undefined
function hello(a, b) { ... } //当调用函数时没有传实参,函数中获取的参数值就是undefined
var d = window.xxx; //当访问一个对象中不存在的属性时,得到的值也是undefined
alert(null == undefined); //结果是true
alert(null === undefined); //结果是false,二者不属于同一个基本类型
对象(Objects)
除了前面讲的五种基本类型之外,JavaScript里其余的一切都是对象。
数组(Array)是对象
函数(Function)也是对象
对象(Object)当然是对象
如何判断一个值是什么类型? 用typeof运算符
alert(typeof NaN); //'number'
alert(typeof null); //'object'
alert(typeof undefined); //'undefined'
如果声明的变量将被用来保存一个对象,但还不能马上赋值时,那么最好先将该变量的值初始化为 null。这样将来只要检查变量的值是不是null就可以判断出这个变量是否已经引用了一个对象了。
而一般情况下,都不需要显式地去给一个变量赋值为undefined,因为所有变量只要未初始化,它的值就已经是undefined了。
四 数组:
创建数组(用一对方括号表示新创建的空数组)
var a = [];
给数组元素赋值(同一个数组中允许包含任意不同类型的元素)
a[0] = 123;
a[1] = 'hello world';
a[2] = false;
初始化数组时可以直接提供数组元素的值
var a = [123, 'hello world', false]; //初始化结果与用上面的方法相同
通过.length属性可以获取数组元素的个数
alert(a.length);
var a = ['banana', 'apple', 'orange'];
a.push('grape'); //向数组中追加新的元素
alert(a.length); //结果是4,证明新增了一个元素
alert(a[3]); //结果是'grape',通过最大的下标可以取到新添加的元素
a.reverse(); //将数组的元素顺序反转
alert(a); //结果是['grape', 'orange', 'apple', 'banana']
var s = a.join('_'); //将数组转成字符串,以参数指定的分隔符分隔数组元素
alert(s); //结果是字符串'grape_orange_apple_banana'
var b = a.pop(); //移除数组中的最后一个元素并返回该元素
//b='banana',a=['grape', 'orange', 'apple']
var c = a.shift(); //移除数组中的第一个元素并返回该元素
//c='grape',a=['orange', 'apple']
a.unshift('mango'); //将指定的元素插入数组开始位置并返回该数组
//a = ['mango', 'orange', 'apple']
var d = a.slice(0, 2) //返回数组中的一段,如果不提供第二个参数就一直到结尾
//d = ['mango', 'orange']
var e = a.concat(d); //连接两个或更多个数组
//e = ['mango', 'orange', 'apple', 'mango', 'orange']
五 javascript函数:
创建:函数可以通过两种方式创建
第一种(声明式):
function myFunc1(myName) {
alert(myName + '的第一个函数执行了!');
}
第二种(引用式):
var myFunc2 = function (myName) {
alert(myName + '的第二个函数执行了!');
};
以上两种方式创建的函数,调用方法是一样的
myFunc1('张三'); //张三的第一个函数执行了
myFunc2('李四'); //李四的第二个函数执行了
两种声明方式区别:
声明式函数在运行前解析;引用式函数在运行时解析。
<script>
function f1() {
alert(1);
}
f1(); //因为第一个f1在运行前就被第二个f1覆盖所以此处调用的是第二个f1
function f1() {
alert(2);
}
f1(); //调用第二个f1
var f1 = function() {
alert(3)
};
f1(); //调用第三个f1
var f1 = function() {
alert(4)
};
f1(); //调用第四个f1
</script>
function对象:
作为参数:
function f3(a, b) { return a + b }
function f4(a, b) { return a - b }
function f5(f, a, b) { return f(a, b) }
f5(f3, 10, 5) //15
f5(f4, 10, 5) //5
作为返回值:
function f6(a, b) {
return function(c) {
return a + b + c;
};
}
var f7 = f6(10, 20);
var f7 = function(c) {
return 10 + 20 + c;
};
f7(5) //35
f7(30) //60
object对象:
对象用来表示一组“名-值”形式的结构化数据
创建对象
var p1= {};
设置对象属性(绿色的是自定义的属性名)
p1.name = "张三";
p1.sex = "男";
p1.age = 20;
另一种设置属性的方法(与上面结果相同)(属性名可以是js的关键字)
p1['name'] = "张三";
p1['sex'] = "男";
p1['age'] = 20;
访问对象的属性值
alert(p1.name);
alert(p1['name']);
给对象添加方法(属性值是可执行的函数)
p1.say = function () {
alert('我叫' + this.name + ',' + this.age + '岁!');
};
p1.happyBirthday = function () {
this.age++;
在初始化对象时同时设置属性值和方法
var p1 = {
'name': '张三',
'sex': '男',
'age': 20,
'say': function () {
alert('我叫' + this.name + ',' +
this.age + '岁!');
},
'happyBirthday': function () {
this.age++;
}
};
json:
从结构上看,所有的数据(data)最终都可以分解成三种类型:
标量(scalar):单独的字符串(string)、数字(numbers)等,比如"北京"这个词。
序列(sequence):若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海,广州"。
映射(mapping):一个名/值对(name/value),即数据有一个名称,还有一个与之相对应的值,又称作散列(hash)或字典(dictionary),比如"首都:北京"。
JSON(JavaScript Object Notation)是一种独立于语言的轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
var p1 = {
"name": "张三",
"pets": [
{ "type": "CAT", "name": "Kitty", "age": 2 },
{ "type": "DOG", "name": "Doggy", "age": 5,
"children": ["lady", "gaga"] }
]
}
alert(p1.pets[1].children[0]); //"lady"
日期对象:
创建方法:
var d = new Date();
d.toString(); //Wed Jul 4 15:46:13 UTC+0800 2012 国际时间
日期对象提供了多种方法,以下介绍几种常用方法:
getFullYear(); //返回4位数字年份
getMonth(); //返回月份(0-11)
getDate(); //返回一月中的某一天(1-31)
getDay(); //返回一周中的某一天(0-6)
……
setFullYear()方法和getFullYear()方法对应,表示设置年份……