一、javascript简介
javascript是一种脚本语言,代码不进行预编译,由浏览器执行,用来向页面添加交互行为,主要由ECMAScript(核心)、BOM(浏览器对象模型)、DOM(文档对象模型)组成
二、写法
写法和css的三种样式类似
1、行内js
使用几率很少,只针对某些标签的特殊操作
//语法:
<a href="javascript:alert('行内js,伪协议')">滴滴</a>
上述代码中执行的不是跳转地址,而是其中的js代码
javascript:这是伪协议的意思,伪协议是为了告诉浏览器接下来的代码是JS代码
alert():它可以弹出一个提示消息和确认按钮的框,在点击确认之前是不会执行后面代码的
2、内部js
页面内的代码写在一组<script>标签内,这组标签可以卸载页面的任何位置,就算里面没有写东西,也不要使用单标签
<script>
alert("内部js")
</script>
3、外部js
先单独定义一个JS文件
然后将这个JS文件与要使用的网页关联起来
<!-- 外部js-->
<script src="js/test.js"></script>
三、语法
对象类型全是var 但有数据类型
1、函数
正常函数写法
//语法
function 函数名(参数列表){
JS代码
[return 返回值;]
}
匿名函数写法:匿名函数不需要方法名,但需要变量接收,使变量代表这个函数,调用也是使用变量名
var action = function(){
console.debug(“前方高能,请非战斗人员迅速撤离”);
}
action();
如果匿名函数既有函数名,又有变量接收,需要使用变量名调用函数,函数名不可调用(等于没写)
var b= function test() {
console.log('匿名函数b');
}
b()
test()//无效
2、变量
var 变量名 = 变量值
2.1、全局变量和局部变量
和java里一样使用
2.2、隐式全局变量(不推荐用)
//写在函数里
变量名 = 变量值
function test01() {
c = "隐式全局变量"
}
test01()
console.log(c);//显示隐式全局变量
3、对象
之前写法
var emp = {
'属性名':属性,
'id': 1,
'name':'zs'
}
3.1、自定义对象
和定义函数相似,为了区分,函数名是使用小驼峰命名,对象名是使用大驼峰
function 对象名() {
}
给类中添加属性用this
function User01(name,age) {
this.name = name
this.age = age
}
var user01 = new User01('ls',20);
console.log(user01);
在类里面定义方法
//在类里面定义方法不能直接调用,需要把方法当做属性用this接一下
function Emp() {
this.s = function hello() {
}
}
//调用类里的方法
var emp = new Emp();
emp.s()
3.2、内部对象
3.2.1、本地对象
本地对象需要new来创建所需的实例
包括:Object({})、Boolean、Number、Date、String、Array([])等,重点掌握Date和String,其它的到API里去找即可,如下是日期对象
//1.创建一个对象
var date = new Date();
// 2.给这个对象添加方法
date.dateFormat = function() {
var d = new Date();
var year = d.getFullYear();
var month = d.getMonth() + 1; //返回的月份是从0开始11结束
var day2 = d.getDate(); //月中的天数是从1到31
var hour = d.getHours(); //取值范围0到23
var minute = d.getMinutes(); //取值范围是0到59
var second = d.getSeconds(); //取值范围是0到59
//yyyy/MM/mm HH:mm:ss
console.log(year + '/' + month + '/' + day2);
}
date.dateFormat()
// charCodeAt(index)
// 返回指定位置的unicode码
var s = "abcd";
console.log(s.charCodeAt(1));
// fromCharCode() -- 相当于静态方法,用法:String.fromCharCode(65);
// 可接受一个指定的 Unicode 值,然后返回一个字符
console.log(String.fromCharCode(65));
3.2.2、内置对象
内置对象不需要new来创建实例,包含GLobal、Math
GLobal的api
| 函数 | 描述 |
|---|---|
| encodeURI() | 针对中文的uri进行编码 |
| decodeURI() | 解码某个编码的uri |
| encodeURIComponent() | 处理数字和字母都进行编码 |
| decodeURIComponent() | 解码 |
| eval() | 计算javascript字符串,并把它当做JS代码来执行 |
var encode02 = encodeURIComponent(url);//除了字母和数字都进行编码
var decode02 = decodeURIComponent(encode02);
console.log(decode02);
var a = "console.log(decode02)";
console.log(a);
//会先识别是否可执行,如果可以执行,就不会直接输出字符串而是执行逻辑
eval(a)
3.3、BOM(浏览器对象模型)
BOM是Browsr Object Model的缩写 所有BOM和DOM的对象都称为宿主对象,BOM有以下内容
(1) 打开一个窗口就是一个window对象;
(2) 窗口里面使用location表示地址栏;
(3) 窗口里面的内容使用document来表示;
Window对象
Window对象是BOM中的顶级对象,默认可以不写,可以获取其他BOM对象
| 方法 | 描述 |
|---|---|
| alert() | 显示带有一段消息和一个确认按钮的警告框 |
| setInterval() | 定时任务,按设定时间反复执行 |
| setTimeout() | 延时执按照设定时间延时执行 |
location对象
document对象
四、数据类型
1、原始数据类型
数制表示:可以用十/八/十六进制进行计算
var a=412;//412
布尔值
var b=true;//true
字符串:单、双引号都代表字符串
var c='李斯';//李斯
非数(NAN):不是数字,用NAN表示,在JS中采用了isNAN()函数来判断当前字符是否是数字
var d=1/'a';//NAN
无穷数(Infinity):在JS中的计算会取极限值,不会取固定值,如0会取无限趋近于0,而不是直接取0计算
var e=1/0;//Infinity
NULL :表示一个不存在的对象,只有一个值null
var f=null;//null
undefined:表示未定义或未初始化
var g;//undefined
2、流程控制
JS中同Java一样存在流程控制语句,用法一样:if和Switch...
在JS中,所有的变量都可以判断true和false,如下:
if (1){
console.log("1是true");
}else {
console.log("1是false");
}
if (0){
console.log("0是true");
}else {
console.log("0是false");
}
if (null){
console.log("null是true");
}else {
console.log("null是false");
}
if (NaN){
console.log("NAN是true");
}else {
console.log("NAN是false");
}
if (undefined){
console.log("undefined是true");
}else {
console.log("undefined是false");
}
其中只有数字1是true,其余全为0
五、运算符
基础的赋值、算数、逻辑运算符就不介绍了,和java一样,这里主要讲比较运算符
比较运算符:==(只比较值,不比较数据类型) 、 != 、===(既比较值,也比较数据类型) 、 !==
console.log(2 / '2');//1 字符串如果是数字,就可以直接进行数字运算
console.log(2 + '2');//22 拼接
//== != === !==
var a = 2
var b = '2'
console.log(a == b);//true 在java里因为字符类型不同会返回false,在js里只比较值,不会比较类型 返回true
console.log(a === b)//false 既比较值也比较数字类型
console.log(a != b)//false
console.log(a !== b)//true
总结:多一个等号就会比较类型,不然就只比较值