JavaScript

发布时间 2023-09-04 17:39:18作者: 种自己的花儿

JavaScrpt

基本概念

定义:一种直译式、基于对象、基于事件驱动、弱类型的脚本语言

  • 直译:不需要像C、C++一样先编译后执行,JS逐行运行
  • 基于对象:用于操作网页上的操作按钮、下拉框
  • 基于事件驱动:点击按钮、悬浮触发

作用:给网页增加动态特效,实现交互,美化网页页面

基本特点:

  1. 脚本语言,逐行运行
  2. 基于对象
  3. 简单性:变量类型简单,数据类型非严格
  4. 动态性:事件驱动,不需要经过web服务器
  5. 跨平台:仅需浏览器支持

位置:JS脚本放在html结构的head或者body当中

用法:JS代码必须写在<script></script>标签之间

外部引用:<script type ="text/javascript" src="common.js"></script>


JS调试

  1. alert(): 网页内置的一个对象,作用:弹出一个对话框,有输入的信息
  2. console.log():谷歌开发工具的控制台输出
  3. debug: 直接进行调试

tips:JS是即时执行语言,修改JS文件之后刷新浏览器即可查看最新效果


JS的基本类型

弱类型/动态语言:JS不用提前声明变量,在程序运行过程中,类型自动被确定

基本类型

  1. undefined(未定义):

    • 当定义一个变量,但是没有赋值,这样的变量就是未定义类型
    var message;
    alert(typeof(message))
    //underfined
    
    • 当一个值没有返回值的时候,默认为undefined

    • 获取对象属性的时候,如果未定义该属性,则会返回undefined

      var obj={attr1:'attr1'}
      
      obj.attr1 // attr1
      obj.attr2 // undefined
    
  2. boolean(布尔值):TRUE FALSE

  3. null(空值):表示一个空对象指针,适用场景:定义变量准备在将来用于保存对象

    • tips:undefined类型派生自null类型,因此对这两者的相等性测试返回TURE
    null==undefined // TRUE
    
    • 用法差异:任何一种情况下都不会显式地将一个变量定义为undefined,但是如果准备设置一个变量用于后续保存一个变量值的话,那么就应该明确将这个变量定义为null类型
  4. string(字符串):字符串使用单引号、双引号都可以

  5. number(数字):JS只有一种数字类型,可以带小数点也可以不带

    var x1=34.00;     //使用小数点来写
    var x2=34;        //不使用小数点来写
    
    • 科学计数法表示极端值
    var 123e5   //12300000
    var 123e-5  //0.00123
    
  6. symbol(符号):表示唯一的标识符,symbol保证是唯一的。即使有多个相同描述的symbol,每一个值也并不相同

    let id1 = Symbol("id");
    let id2 = Symbol("id");
    alert(id1 == id2)   // False
    
  7. 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声明的变量仅仅在块的级别作用域生效


  • 作用域

  1. 全局作用域:最外层定义var或者没有使用var直接赋值的变量
var global =100;
a = 300;
  1. 函数作用域:函数可以被当做一个值来传递,(函数内部可以访问外部作用域称为闭包?)
function funtest{
var funstr = "test";
}
  1. 块级作用域:块作用域由{}包括,if语句和for语句的{}也属于块作用域,let和const声明变量仅仅在块级别作用域生效

  • 运算符

  1. 布尔操作符( && 、|| 、!)

  2. 加减乘除运算符( +、-、 * 、 / 、% )

  3. 关系运算符 ( > 、< )

  4. 相等运算符( == 、 === )

    tips==只判断值是否相等,而===不仅判断值是否相等,还判断数据类型

var equal =(10=='10')  //TRUE
var equal2 =(10==='10')  //FALSE
  1. 条件操作符
var a=true ? 'ok':'no';
  1. 赋值运算符 =

  2. 自增自减运算符++ --

  3. 条件判断

if(){

}
else{

}
  1. 多重判断 (超过四重判断建议选择switch)
var tmp=12;
switch(tmp){
case 12:
	xxxxx;
case 13:
	xxxxx;
 default:
	xxxxx; 
}
  1. for循环
var count = 0;

for (var i = 0;i < 10; i++ ) {
    count = count + i;
}
console.log(count);
// 执行完循环体语句,再去执行i++,即递增i的值
  1. for in:精准的迭代语句,可以用来枚举对象属性
var obj = { a: 1, b: 2 };

for( var key in obj){
    console.log(key,obj[key]);
}
// a 1
// b 2
  • 函数

  • 注意事项

  1. 如果有两个名字相同的函数,则这个名字属于后面的函数
  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