JavaScrpt
基本概念
定义:一种直译式、基于对象、基于事件驱动、弱类型的脚本语言
- 直译:不需要像C、C++一样先编译后执行,JS逐行运行
- 基于对象:用于操作网页上的操作按钮、下拉框
- 基于事件驱动:点击按钮、悬浮触发
作用:给网页增加动态特效,实现交互,美化网页页面
基本特点:
- 脚本语言,逐行运行
- 基于对象
- 简单性:变量类型简单,数据类型非严格
- 动态性:事件驱动,不需要经过web服务器
- 跨平台:仅需浏览器支持
位置:JS脚本放在html结构的head或者body当中
用法:JS代码必须写在<script></script>标签之间
外部引用:<script type ="text/javascript" src="common.js"></script>
JS调试
- alert(): 网页内置的一个对象,作用:弹出一个对话框,有输入的信息
- console.log():谷歌开发工具的控制台输出
- debug: 直接进行调试
tips:JS是即时执行语言,修改JS文件之后刷新浏览器即可查看最新效果
JS的基本类型
弱类型/动态语言:JS不用提前声明变量,在程序运行过程中,类型自动被确定
基本类型:
-
undefined(未定义):
- 当定义一个变量,但是没有赋值,这样的变量就是未定义类型
var message; alert(typeof(message)) //underfined-
当一个值没有返回值的时候,默认为undefined
-
获取对象属性的时候,如果未定义该属性,则会返回undefined
var obj={attr1:'attr1'} obj.attr1 // attr1 obj.attr2 // undefined -
boolean(布尔值):TRUE FALSE
-
null(空值):表示一个空对象指针,适用场景:定义变量准备在将来用于保存对象
- tips:undefined类型派生自null类型,因此对这两者的相等性测试返回TURE
null==undefined // TRUE- 用法差异:任何一种情况下都不会显式地将一个变量定义为undefined,但是如果准备设置一个变量用于后续保存一个变量值的话,那么就应该明确将这个变量定义为null类型
-
string(字符串):字符串使用单引号、双引号都可以
-
number(数字):JS只有一种数字类型,可以带小数点也可以不带
var x1=34.00; //使用小数点来写 var x2=34; //不使用小数点来写- 科学计数法表示极端值
var 123e5 //12300000 var 123e-5 //0.00123 -
symbol(符号):表示唯一的标识符,symbol保证是唯一的。即使有多个相同描述的symbol,每一个值也并不相同
let id1 = Symbol("id"); let id2 = Symbol("id"); alert(id1 == id2) // False -
object(对象)
var person{ firstname:"John", lastname:"Smith", id:1122 };- 对象属性的寻址方式
1.name = person.firstname; 2.name = person["firstname"];
- tips:使用typeof运算符能够查看数据的类型,但并不是一一对应,例如typeof(null)返回的是空对象
基本语法
-
日志函数
console.log("hello world!"); // "hello world!"
tips:日志函数仅用于调试过程,不应该用于呈现最终结果
-
变量声明
一般使用var和let声明变量,使用const声明常量
let v1 = "variable";
const c1 = "Constant";
tips: 1.常量只能赋一个值,而变量可以重复赋值,且使用前必须先声明
2.var一般是全局变量,而let和从const声明的变量仅仅在块的级别作用域生效
-
作用域
- 全局作用域:最外层定义var或者没有使用var直接赋值的变量
var global =100;
a = 300;
- 函数作用域:函数可以被当做一个值来传递,(函数内部可以访问外部作用域称为闭包?)
function funtest{
var funstr = "test";
}
- 块级作用域:块作用域由{}包括,if语句和for语句的{}也属于块作用域,let和const声明变量仅仅在块级别作用域生效
-
运算符
-
布尔操作符( && 、|| 、!)
-
加减乘除运算符( +、-、 * 、 / 、% )
-
关系运算符 ( > 、< )
-
相等运算符( == 、 === )
tips:
==只判断值是否相等,而===不仅判断值是否相等,还判断数据类型
var equal =(10=='10') //TRUE
var equal2 =(10==='10') //FALSE
- 条件操作符
var a=true ? 'ok':'no';
-
赋值运算符 =
-
自增自减运算符++ --
-
条件判断
if(){
}
else{
}
- 多重判断 (超过四重判断建议选择switch)
var tmp=12;
switch(tmp){
case 12:
xxxxx;
case 13:
xxxxx;
default:
xxxxx;
}
- for循环
var count = 0;
for (var i = 0;i < 10; i++ ) {
count = count + i;
}
console.log(count);
// 执行完循环体语句,再去执行i++,即递增i的值
- for in:精准的迭代语句,可以用来枚举对象属性
var obj = { a: 1, b: 2 };
for( var key in obj){
console.log(key,obj[key]);
}
// a 1
// b 2
-
函数
-
注意事项:
- 如果有两个名字相同的函数,则这个名字属于后面的函数
- eval和arguments是有特定含义的单词,不能将它们用于函数或者参数的命名
- 创建函数 function
1.function name(){...} //函数声明
2. var fun = function(){...} //函数表达式
3. var sun = new Function(...) //Function 构造函数
- 参数arguments:利用参数名和arguments(参数对象)获取到函数调用时传递过来的值
var fun = function(a,b,c){
console.log(arguments[0],a);
console.log(arguments[1],b);
console.log(arguments[2],c);
}
fun('a','b','c');
// a a
// b b
// c c
//调用了fun函数并传递了三个作为参数的字符串'a','b','c';arguments[0]获取第一个参数的值
- return返回值
var fun = function(a,b){
return a + b;
// 若没有返回值return,则默认返回undefined
}
var result = fun(2,3); // 5