JavaScript基础

JavaScript基础

  • JavaScript: 基于对象和事件驱动,运行在浏览器客户端的脚本语言。

    js的运行环境: 运行在浏览器端的一种语言
    最后将所有的js代码都要以对象的形式去执行,都要通过事件的方式去触发执行【DOM】
    
  • JavaScript组成

    ☞ ECMASCRIPT    定义了javascript的语法规范,描述了语言的基本语法和数据类型
    ☞ BOM (Browser Object Model) 即浏览器对象模型。
       浏览器对象模型,一套操作浏览器功能的API,通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
    ☞ DOM (Document Object Model) 文档对象模型,一套操作页面元素的API,DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作 
    
  • JavaScript书写位置
    内嵌式写法

     ☞  在html页面内部设置
         <script type="text/javascript">
             js
         </script>
         注意: 该标签可以放到head标签中或者body标签中
    

    外联式写法

     1. 新建js文件
     2. 通过script标签引用到当前页面中
     <script type="text/javascript" src="test.js"></script>
     注意:
     1. 不能将代码写到外联式标签中。
     2. 一个网页中可以同时调用多个外部js文件
     <script type="text/javascript" src="test.js"></script>
     <script type="text/javascript" src="test.js"></script>
     <script type="text/javascript" src="test.js"></script>
     <script type="text/javascript" src="test.js"></script>
    

    行内式写法

     ☞  将js代码写到标签内部
     	<div onclick="js代码"></div>
     	注意:
     	onclick 是一个点击事件: 当点击div的时候,会触发该事件,执行该事件中的代码
    
  • JavaScript中输入消息方式

    alert();
    document.write('<h1>我是一段文字</h1>');   在网页中输出信息
    prompt("请输入姓名","测试");   //接收用户输入的
    confirm("确定么");
    console.log("abcd");	 //在控制台中输出消息
    总结:
       1. 在js中如果希望输出一个具体的文本信息,必须带引号
       2. 在使用document.write();的时候,可以在方法内输出html标签,加引号。
    
  • 变量
    概念

     ☞ 变量:  变量指的是在程序中保存数据的一个容器
    

    定义变量及赋值

     ☞ 定义变量
       var  变量名;
     ☞ 赋值
        变量名 = 值;
     ☞ 总结:
         1. 一个变量一次只能保存一个值
         2. 最后一次的赋值结果
         3. 变量是区分大小写(js区分大小写)
    

    变量命名规范

    ☞ 规则  必须遵守的,不遵守的话 JS引擎 发现并报错 
      1. 由字母(A-Z  a-z)、数字(0-9)、下划线(_)、美元符号( $ )组成,如:var usrAge,num01, _name
      2. 区分大小写 强调:JS 严格区分大小写 ,var app; 和 var App; 是两个变量
      3. 不能 以数字开头,或者汉字定义变量名
      4. 不能 是关键字、保留字 和 代码符号,例如:var、for、while、&, class
      5. 不能出现空格   
    ☞ 规范  建议遵守的,不遵守的话 JS引擎 也不会报错
      1. 变量名必须有意义
      2. 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。
    
  • 数据类型

     ☞ 数据类型:数据类型指的是变量的数据类型
    

    ①简单的数据类型
    数值类型(number)

    ☞ 凡是数字都属于该类型【整数,小数,负数】
    ☞ 只要变量的值是一个具体的数字,那么当前变量的数据类型就是数值类型
    ☞ number类型表示的数字大小:
      最大值是±1.7976931348623157乘以10的308次方    Number.MAX_VALUE
      最小值是±5 乘以10的-324次方	   Number.MIN_VALUE
    ☞ 数值类型表示方式:
    ✔ 十进制表示
      var  n1=10,n2=9, n3=100;
    ✔ 十六进制表示
       以 0x开头 0到9之间的数字,a(A)-f(F)之间字母构成。 a-f对应的数字是10-15
       var num = 0xA;
    ✔ 八进制表示
       八进制直接以数字0开始,有0-7之间的数字组成。
       var num1 = 07;   
       var num2 = 06;  
       var num3 = 05;   
    ☞ 备注:
           进行算数计算时,八进制和十六进制表示的数值最终都将被转换成十进制数值。
    

    字符串类型(string)

    ☞ 字符串可以是引号中的任意文本。可以使用单引号或双引号
    ☞ 在js中一般写字符串类型的变量时候,推荐使用单引号。
    ☞ 注意:
       1. 单引号和双引号之间的嵌套
     	  例如: 输出    我是"高帅富"程序猿;  
       2. 转义字符
    	   \n        换行
           \\		 斜杠
           \'		 单引号
           \"		 双引号
           \r 	     回车符
    

    ▶字符串特性及方法

     ◆字符串特性:不可变性。       注意: 尽量不要大量的拼接字符串
     ◆字符方法
    	  1. charAt(index)     //获取指定位置处的字符
          2. str[index]		   //获取指定位置的字符 (H5中的方法)
          
    ☞ 字符串方法
       	  1. concat()                //拼接字符串  等效于 +
    	  2. slice(strat,end)       //从指定位置开始,截取字符串到结束位置,end值取不到
      	  3. substring(start,end)   //从指定位置开始,截取字符串到结束位置, end值取不到
          4. substr(start,length)   //从指定位置开始,截取length长度个字符
    
    ☞ 位置方法
          1. indexOf(字符)      //返回字符在字符串中的位置
          2. lastIndexOf(字符)  //从后往前找,只找第一个匹配的字符
    
    ☞ 去除空白
          trim()      //只能去除字符串前后空白
    
    ☞ 大小写转换法
          toLocaleUpperCase()  //转化为大写
          toLocaleLowerCase()  //转化为小写
    
    ☞其他
          replace(a,b)  // 用b替换a
          split()       // 以一个分割符,将一个字符串串分割成一个数组
    

    布尔类型(boolean)

    true  和  false
    

    undefined类型

    //如果一个变量没有赋值,该变量的默认是undefined
      var n1;
    //如果一个变量的值是undefined,那么该变量的数据类型就是undefined类型
    

    null 空对象类型

    ◆ null类型被看做空对象指针只有一个值,即 null 值
    ◆ null 空比如一个变量原先有值 可以将变量的值设置为null 代表清空变量容器中的数据 
    ◆ 作用为了清空对象。
    

    ②复杂数据类型
    object类型

    js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

    Object类型
      我们看到的大多数类型值都是Object类型的实例,创建Object实例的方式有两种。
      ☞第一种是使用new操作符后跟Object构造函数,如下所示
        var person = new Object();
        person.name = "Xiaoming";
        person.age = 24;
      ☞第二种方式是使用对象字面量表示法,如下所示
        var person = {name : "Xiaoming",age : 24 };
    

    ③数据类型判断

    ☞ 使用  typeof 变量  可以得到对应变量的数据类型
    ☞ 例如:
      var n1 = 123;
       //获取n1的数据类型
       console.log(typeof n1);
       var n2 = '123';
       console.log(typeof n2);
       var n3 = true;
       console.log(typeof n3);
    

    ④判断一个变量是不是数字

    isNaN(x) 方法
    例如:
    var usrAge = 21;
    var isOk = isNaN(usrAge);
    console.log(isNum); // false ,21 不是一个 非数值
    var usrName = "James";
    console.log(isNaN(usrName));//true ,"James"是一个 非数值
    

    ⑤数据类型转换
    转数值类型

     ☞ Number(变量):
    总结:
    	  1. 可以通过该方法将数据类型转换为数值类型
           var n1 = '123';
           console.log(typeof n1);
           //方法一:通过Number()
               n1 = Number(n1);
           console.log(typeof n1);
         2. 在转换的过程中可以将原来的值保留,遇到小数直接保留下来,不会舍去
         3. 如果变量无法转换为数值类型,那么返回的结果是NaN; 对应的数据类型依然是数值类
         4. 如果将布尔类型转换为数值类型,true 转化后的结果是 1  false 转化后的结果是0
     ☞ parseInt(变量)
       var num1 = parseInt("12.3abc");   // 返回12,如果第一个字符是数字会解析知道遇到非数字结束
       var num2 = parseInt("abc123");   // 返回NaN,如果第一个字符不是数字或者符号就返回NaN
    备注:
       1  只会保留整数部分,通过该方式进行数据类型转换后得到就是一个整数
       2. 如果一个变量中的值无法转换为具体数字,那么返回的结果是一个 NaN 的值
       3. NaN (not  a  number)   ----NaN对应的数据类型是数值类型
       4. 通过该方法可以将其他数据类型转为数值类型
     ☞ parseFloat(变量)
    总结:
        1. 通过该方法可以将其他数据类型转换为数值类型
        2. 在转换过程中,如果遇到小数,那么会直接将小数部分保留
        3. 如果转化不成功过,返回的结果NaN 
       parseFloat()把字符串转换成浮点数
    

    转字符串类型

     ☞  变量.toString()
         var num = 5;
         console.log(num.toString());
     ☞  String(变量)	
    备注:
         String()函数存在的意义:有些值没有toString(),这个时候可以使用String()。比如:undefined和null
    

    转布尔类型

     ☞ Boolean() 
     备注:
          0  |''(空字符串) | null | undefined | NaN  会转换成false  其它都会转换成 true
    
  • 循环
    ①语法

     ☞如果能明确循环次数,推荐使用for循环,如果循环次数不确定,可以使用while获取do while循环
     for (变量初始化; 条件表达式 ;  变量自增(变量自减)) {
       循环体代码
      }
    

    ②执行过程

    1. 先执行变量初始化
    2. 条件判断,结构是否为true
    3. 如果条件为true,进入循环体中执行代码 【如果条件为false,循环立即结束】
    4. 变量自增或自减  --   条件判断   --  true  --- 执行代码
    

    ③案例(冒泡循环)

    // 冒泡排序
      	 var arr = [5,6,8,4,1,2,3];
      	function paixu(arr){
      	// 循环趟数
      		for(var i=0;i<arr.length-1;i++){
      	// 比较次数
         	for(var j=0; j<arr.length-1-i;j++){
      	// 比较交换次数
      			if(arr[j]>arr[j+1]){
      				var a=arr[j];
      	 			arr[j]=arr[j+1];
      	 			arr[j+1] = a;
      	 			}
      	 		}
      	 	}	
      	 }
      	 paixu(arr)
      	 console.log(arr)//1,2,3,4,5,6,8
    

    ④continue语句

    当程序遇到continue的时候,会结束本次循环,后面的代码也不会执行。进入到下一次循环中。

    ⑤break语句

    当程序遇到break语句的时候,程序会立即终止,后面的代码不执行

  • 数组
    数组: 可以一次保存多条数据, 数组也是一个用来保存数据的容器。
    ①创建数组

      构造函数创建数组 :  var   自定义数组名称  = new Array();
      字面量创建数组 :    var  自定义数组名称 = [] ;
    

    ②数组赋值

    ☞构造函数方式
      var  ary = new  Array (1,2,3,5,6);
    ☞字面量方式赋值
      var  ary = [1,2,3,4,6];
    ☞通过索引方式赋值
      var  ary = [];
      ary[0]=1;
      ary[1]=2;
    ★总结:
     1. 数组中索引值是从 0 开始的
     2. 通过索引的方式给数组赋值,要按照顺序个数设置
     3. 通过  数组名.length 可以获取到当前数组的长度
    

    ③数组属性方法

    ☞ 数组中的属性 length
    ☞ 判断变量是不是数组    数组变量名 instanseOf  Array
    ☞ 判断变量是不是一个数组    Array.isArray(ary)   //存在浏览器兼容 (H5)中的新方法
    ☞  toString()   // 把数组转换为字符串,使用逗号分隔
    ☞  valueOf()   //  返回数组对象本身
    ☞ 栈方法(先进后出)
       ary.push()   // 该方法有一个返回值,表示数组最新的长度,该方法中可以设置多个参数
       ary.pop()    //返回数组中最后一个字,且会修改数组的长度
    ☞ 队列方法(先进先出)
       ary.shift() 		//取出数组中的第一个元素,修改数组的长度
       ary.unshift(number)  //在数组中最开始位置添加一个值
    ☞ 排序方法
     	ary.reverse()  // 翻转数组
        ary.sort()	//数组排序  默认是从字符编码排序的
      	
     ☞ 其他方法汇总
         ◆ concat()  //把两个数组拼接到一块,返回一个新数组
      	 ◆ slice(startindex, endindex)   //从当前数组中截取一个新的数组 
      	   	  ✔ 第一个参数表示开始索引位置,第二个参数代表结束索引位置
      	 ◆ splice(startindex, deletCont, options)  //删除或者替换数组中的某些值
      	 	  ✔ 第一个参数代表从哪开始删除
              ✔ 第二个参数代表一共删除几个
              ✔ 第三个参数代表要替换的值
      	 ◆ indexOf(content[,index]),lastIndexof()   //没找到返回-1
      		  ✔ 找数组中的某个值,如果找到返回索引位置,如果没有找到返回-1
      		  ✔ lastIndexof()  从数组的末尾开始找,如果找到,返回索引位置,如果没有找到返回-1
      	 ◆ Join()   //将数组中的每一个元素通过一个字符链接到一块
      	 ◆ 数组遍历
           	 filter(function(item,index, ary) {})   //返回一个新数组,可以获取赛选结果
      		 map(function(item,index,ary) {})  //遍历数组,返回一个新数组
      		 forEach(function(item,index, ary) {}) //遍历数组,没有返回值
    
  • 函数
    可以封装一段特定功能代码,然后通过函数名调用,实现对该段代码重复使用
    ①函数的作用

    实现代码的重复使用。
      ✔ 对分散代码整合(封装)
      ✔ 重复使用
    

    ②创建函数

    方式一: 函数声明及执行方式
    ☞ 函数的声明:
    	function  自定义函数名() {
    		具体的功能代码
    	}
    注意:
    	 1. 由于函数是用来实现某种特定功能代码,所以一般我们设置函数名的时候,以动词开始。
    	 2. 函数不能自己执行代码,需要通过函数名调用实现代码的执行
    ☞ 调用函数(执行函数)
     	函数名();  //函数的调用
     	
    方式二:函数表达式(字面量)及执行方式
    	 var  fn = function () {
    
    	}   
    	fn();
    
  • 函数其他
    ①arguments

       ☞  arguments 对象,里面保存了所有参数信息
       ☞  注意使用:
       ✔  如果一个函数的参数列表个数不确定(形参不确定),可以通过arguments获取
       ✔  如果一个函数能够确定参列表,还是推荐使用固定的参数列表
    

    arguments小案例

     // 求任意个数中的最大值
        function get_max () {
        //假设最大值为max
        	var  max = arguments[0];
        	//arguments里面放的是函数的参数个数
        	for (var i = 1; i < arguments.length; i++) {
       		if (max < arguments[i]) {
       			max = arguments[i];
       		} 
        	}
        	return max;
        }
        console.log(get_max(8,6,2,3));
    

    ②作用域

        概念:  变量或者函数可以起作用的区域
        //简单理解(1.全局作用域)(2.局部作用域)(3.作用域链)
         1.函数外部的区域就是全局作用域
         2.函数内部就是一个局部作用域
         3.当访问一个变量时,会先从本作用域中去找这个变量,若找不到则向上一级作用域中去找,依次类推,就形成了一个作用域链。
    
     //作用域链案例
      //☞ 分析代码执行结果
     var a = 1;
     function fn1(){
     var a = 2;
     function fn2(){
         console.log(a);   //a的值 2
     }
     fn2()
     }
     f1();
     //☞ 分析代码执行结果
     function  f1 () {
       var num = 123;
       function f2 () {
           console.log( num );//123
       }
       f2 ();
     } 
     var  num = 456;
     f1();
    

    ③预解析

     ☞ 代码在执行前会进行预解析。
        1. 变量声明提升,把变量提升到当前作用域的最上面,不包括赋值
        2. 函数声明提升,把函数提升到当前作用域的最上名,不包括函数的调用
    
        //①
     var  a  = 25;
     function abc () {
          alert(a);//undefined
          var a = 10;
     }
     abc();
    
     //②
      var num= 10;
     fun ();
     function fun () {
          console.log( num );//undefined
          var num = 20;
     }
    
      //③
       f1();
       console.log(c);//9
       console.log(b);//9
       console.log(a);//9
       function f1 () {
           var a = b = c = 9;
           console.log(a);//报错‘var  a 在函数中声明属于局部作用域 ,b 和 c 没有var 属于全局’
           console.log(b);//9
           console.log(c);//9
      }
    
  • 对象

    ☞ 现实世界: 万事万物皆对象。
    ✔ 对象:必须是一个具体的事物。 (手机,汽车不是对象,属于一类对象)
           ◆ 对象是由 特征(名词)【属性】 和 行为(动词)【方法】
    ☞ 程序中的对象: 对现实对象的抽象
    ☞ 总结:
       1. 程序中的对象:
       		✔ 对象必须有对应的属性【描述对象的特点,在程序中一般使用名词描述】   
            ✔ 对象必须有行为动作方法 【方法用来描述具体对象的行为动作,一般方法使用动词】
    

    ①创建对象

    创建对象方式:
       ✔ 字面量方式
          var  obj = {
              key : 值,
              key : function () {
              
          	}
          }
          
        ✔ 通过构造函数,
          var  obj = new Object();	
      		 obj.自定义属性名 = 值;
               obj.自定义方法名 = function () {
    
               }
               
        ✔ 工厂模式创建对象(本质就是对第二种方式的封装,创建多个对象)
          function people (name) {
              var obj = new Object();
              	obj.自定义属性名 = name;
              return obj
          }
    
        	var dzx= people('dzx');
    
      	✔ 自定义构造函数创建对象(确定对象的类型)
          function People (name) {
               this.自定义属性名 = name;
          }
    
      	var dzx= new People('dzx');
          
    ☞ 对象的基本操作
      	✔ 获取对象的属性或方法
          1.  对象.自定义属性名  ||  对象['属性名']
      	  2.  对象.自定义方法名()	
    ☞ 判断对象的具体类型
    	  对象名称  instanceOf  构造函数
    

    ②new关键字执行过程

    1. 在内存中创建一个空对象
    2. this指向创建的对象
    3. 执行函数
    4. 返回当前对象
    注意:
        在构造函数中,默认的返回值就是当前创建的对象
    

    ③this关键字

    1. 函数中的this        指向Window
    2. 在方法中的this	  指向当前方法所属的对象
    3. 在构造函数的this	  指向创建的对象
    总结:
    	谁调用函数,this就指向谁
    
  • 内置对象
    ①Math对象

    ☞ 提供了一系列与数学相关的方法或属性  ( 静态  |  实例)
    ☞ Math.PI          获取圆周率【属性】 
    ☞ Math.random()    返回大于等于0小于1之间的随机数
    ☞ Math.floor() 	 向下取整,返回一个小于当前数字的整数
    ☞ Math.ceil()	     向上取整,返回一个大于当前数字的整数
    ☞ Math.round()     四舍五入(小数如果小于0.5,返回小于当前数字的整数,如果小数部分大于0.5返回大于当前数字的一个整数)
    ☞ Math.abs()		取绝对值(返回当前数字的绝对值,正整数)
    ☞ Math.max()       返回一组数中的最大值 (可以设置多个参数,返回其中最大值,参数不可以是数组)
    ☞ Math.min()       返回一组数中的最小值 (可以同时设置多个参数,与最大值效果一样)
    ☞ Math.sin(x)	     返回一个正弦的三角函数 ( 注意: x 是一个以弧度为单位的角度)
    ☞ Math.cos(x)	     返回一个余弦的三角函数 (注意: x 参数是一个以弧度为单位的角度)
    ☞ Math.pow(x,y)	 返回x的y次幂
    

    ②Date对象

    ☞ Date是一个构造函数,必须通过 new Date() 创建一个实例成员才能使用
    ☞ 用法一:空构造函数
       var d = new Date();
    ☞ GMT 格林威治时间(0时区)
    ☞ 用法二:在构造函数中传入毫秒值
       var d = new Date(d.valueOf());
    ☞ 用法三: 传入日期格式的字符串
       var  d = new Date("1988-8-8")
    ☞ 用法四: 传入数字
       var  d = new Date(year, month[,day,time,second]);  //必须设置年和月
    备注: 月份从0 开始, 0 代表1月
    ☞ 获取当前时间的毫秒值:
       d.valueOf()  
       d.getTime()  // 推荐使用
       Date.now()   //H5 新方法 有兼容信息
    

    ③Date中的方法

    ☞ 日期格式化方法
         var d = new Date();
         d.toString();  //转化成字符串
         d.toDateString();  //转换成日期字符串
    	 d.toTimeString();  //转换成时间字符串
         d.toLocaleDateString();   //返回本地的日期格式  (不同浏览器不同效果)
     	 d.toLocaleTimeString();   //返回本地的时间格式  (不同浏览器不同效果)
    ☞ 获取日期其他部分
       	 d.getSeconds()  //获取秒
     	 d.getMinutes()  //获取分钟
     	 d.getHours()    //获取小时
     	 d.getDay()      //返回周几   (0表示周日)
      	 d.getDate()     //返回当前月的第几天
         d.getMonth()    //返回月份   (从0开始)
         d.getFullYear()  //返回年份
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值