JavaScript基础入门

JavaScript基础入门

  • JavaScript基础知识

    1. JavaScript基础知识
    2. 选择结构
    3. 循环结构
    4. 函数
    5. 数组
    6. 字符串与Math
    7. 时间对象
  • BOM与DOM

    1. BOM:什么是BOM
    2. BOM可以做什么
    3. DOM是什么
    4. DOM可以做什么
    5. 事件
    6. cookie

JavaScript基础知识

1. JavaScript组成部分

    **ECMAScript  BOM  DOM**
  1. ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer ManufacturersAssociation)通过ECMA-262标准化的脚本程序设计语言
  2. BOM:浏览器对象模型(Browser Object Model)
  3. DOM:文档对象模型(Document Object Model)

2. JavaScript引入方式

<script>
document.write("<h1>这是一个标题</h1>");
document.write("<p>这是一个段落</p>");
</script>
<script src="路径"></script>

2. 三种常用输出形式

  • alert() 弹出警告框。
alert('弹出警告框') 
  • console.log( )写入到浏览器的控制台。
console.log('控制台输出')
  • document.write()方法将内容写到 HTML 文档中。
document.write('HTML页面输出')

3.变量

	**变量:是用于存储信息的"容器"。**
    声明方式:
	var x= 1;
	var y= 2;
  	var arrNumber = [1,2,3,4,5];
    -变量名取名规范采用驼峰取名法,不能使用关键字和保留字。
    -变量必须以字母开头
	-变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)
	-变量名称对大小写敏感(y 和 Y 是不同的变量)

4.基本数据类型

	number==>数字      (NaN == > not a number) (Infinity == > 无尽)
    string==> 字符串
    布尔值boolean == > true / false,
    undefined==>未定义
    null==>空对象

5.引用数据类型

```对象(Object)```
	var oPer={
		name : "张三",
		age : "18",
	};

```数组(Array)```
	var oNumber=[1,2,3,4,5]

```函数(Function)```
	function myName(name,age){
		return name + age
	}

6.算数运算符 + — * / %

    注意:
    赋值 = %

        6、 关系运算符 <
        >
        <=
        >=
        == === != !==
        返回布尔值 ==
        值等 判断两个值是否相等, 不管数据类型 ===
        恒等 / 全等 判断两个值且数据类型相等 !=
        值不等 和 == 相反 !==
        不恒等 和 === 相反

7. 逻辑运算符

      	 && 		与 		且的关系 两边必须为true 所有条件必须都为真, 结果才为真。
         ||  		或 		只要有一个条件为真, 结果就为真
      	 !			非 		取反
    	与 ==>见假即为假
   		或 ==>见真即为真
   		
   		**短路运算( 见真为真)**
    	表达式计算在一半的时候结果已经出现, 后边的表达式不会再进行计算;
    	先后顺序:算数运算符 > 关系运算符 > 逻辑运算符
	var a = 1 && 2 && 0 && 3 == > a == 0
	见假为假

	var b = 0 || 2; == > b == 2
	见真为真

	var c = null && 2 c == > null
	见假为假

8. 赋值运算

    =  +=  -=  *=  /=  %=  +=  == --
	var a = 2
    a += 2; == > a = 4;
    
	自增与自减
    a++ ++a
    a-- --a
var d = 5;
    var e = d++ + ++d + d * 2;
    表达式的值 5 + 7 + 14
    d的值 5 7 7
  

9. 数据类型的强制转换

    **把其他数据类型转换为数字 Numbe**
  	1.
    	如果字符串内是数字 ==> 	转化值为数字
    	如果字符串内是字符 ==>	 	转化为NaN
    	如果字符串内是 ''空 ==> 	转化为0
  	2.
   		true转化为数字为1;
    	false转化为数字0。
  	3.
    	null转化为数字为0;
    	undefined转化为数字为NaN 

    **把其他数据类型转换为字符串 String**
    1.
    	在原值加 ''
    	true 转化字符串 string(true) == > ‘true'

    **把其他数据类型转换为布尔值 boolean**
    1.
        数字转化布尔值 除0和NaN以外都是true

	2.
		字符串转化布尔值 空字符串为false( 空字符串如果有空格, 则为true) 字符串为true
	3.
     	null和undefined转化都为false
临界值的问题 
        undefind == null == > true
        null != 0 == > true
        NaN == NaN == > false(NaN不和任何值相等)

10. 数据类型的自动转换

    算数运算会把数据类型隐式转化为数字类型;注意:+ 字符串拼接 
    
    转字符串:表达式中如果存在字符串和+就拼接;没有字符串就是求和。

    转布尔值:在关系运算符和逻辑运算符中会自动转化为boolean()
             	关系运算符   > < == 

             	逻辑运算符  a = 1 && 2 || 3;

             	条件语句 if( n % 2 ) ==>自动转化为布尔值;

             	三目运算符 条件语句为==>布尔值;

11. 取值

	parseInt( 取整数)
	parseFloat( 取浮点数)
	
	**浮点数**
    精度丢失 == > 0.2 + 0.1 != 0.3( 可以把小数放大为整数 * 1000 结果 == > /1000 )
    toFixed(n) 四舍五入保留n位小数

12. Math对象

 	Math.abs( | -10 |= => 10) == > 绝对值
    Math.ceil(78.1 == > 79) == > 向上取整
    Math.floor(78.7 == > 78) == > 向下取整
    Math.round(78.266 == > 78) == > 四舍五入
    Math.random(0 - 1 之间随机) == > 随机数
    Math.min()== >返回最低值
    Math.max()== >返回最高值
    Math.pow()== >次幂
    Math.pi()== >返回3 .1415926

如何产生一个指定区间的随机数

  	随机三位数 == >
 	var max=20;
    var min=5;
    var num = Math.round(min + Math.random() * (max - min))
    
	怎样产生20 - 80 之间随机数
    Math.round((80 - 20) * math.random() + 20)

选择结构

  1. 条件语句 if
单分支
    if (条件) {
        语句
    }
双分支
    if (条件) {
        语句
    } else {
        语句
    }
多分支
    if (条件) {
        语句
    } else if (条件) {
        语句
    } else {

    }
  1. switch
switch(){
	case 条件1:{
	};
	break;
	case 条件2:{
	};
	break;
	case 条件3:{
	};
	break;
	
}

switchtrue) {
	case a > b: {
	
	}break;
	case a < b: {
	
	}break;
}

区分使用ifswitch== >
    if 主要用于复杂条件语句;
	switch 主要用于指定常量。
	
	case 判断是 == > 恒等, 字符串一定要加 '';
	如果 {}号 内只有一条语句时可以省略 {}号。
  1. 三目运算符
    //表达式?语句1:语句2
    //表达式一定会转为(布尔值)true,则执行语句1
    //否则就执行语句2
 	var num = 4;
    num % 2 ? console.log('奇数') : console.log('偶数')

    /*简写if(){

    }else{

    }
    表达式?语句1:语句2

循环结构

    三大条件:
    1、 循环初始值,
    2、 循环结束条件,
    3、 循环初始值的改变。

    while() 先判断, 再执行 ==>适合在未知次数时使用, 效率不高

    do {} while () 先执行一次, 再判断 == > 至少执行一次

    for(;;) {}  ==>执行效率更高,简单的已知循环次数( 循环条件较为明确的时候)
    for (1、 循环初始值; 2、 循环结束条件; 3、 循环初始值的改变。) {
        循环的事情
    }
    **双循环,外层走一下,内层走一圈**

函数

函数:实现特定的功能模块, 让这个功能可以在其他地方被反复使用。
==>函数就是一个工具

    特点:
    1. 需要声明( 创造工具);
    2. 不会自己执行, 需要调用;
    3. 函数的声明和调用可以在不同的位置。
   
    **系统函数**
    alert() == > 警告框
    isNaN()
    confirm() == > 确认弹窗 == > 返回true / false
    prompt() == > 带输入框的弹窗 == > 获取用户输入的值
    eval() == > 自动计算表达式内的值, 不管数据类型
    **自定义函数**
    //demo
    // 山上有一口缸可以装50升水,现在有15升水。
    // 老和尚叫小和尚下山挑水,每次可以挑5升。
    // 问:小和尚要挑几次水才可以把水缸挑满?
	思路:
    1.先判断是否已知次数
    2.求循环次数,while
	var max = 50;
	var now = 15;
	var cont = 0;
	var flag = true;

	while (flag) {
    	cont++;
		if (max == now + cont * 5) {flag = false;}
    }
	console.log(cont);
    总结:
    当不知道循环次数的时候,
    定义变量 flag = true 判断flag 进入死循环,
    当判断条件if() 成立时 flag = false
**
    循环嵌套
    99 乘法表, 时针分针秒针, 水仙花数 == > 内层循环一圈, 外层循环只走一下
**
    break,continue;
    break; 直接结束循环。 多层循环时, 只会结束一层。
    continue; 结束当次。

**
    质数 ==>提前执行结束的运用
    //质数 ***重点
    var num = 8;
    for (var i = 2; i < num; i++) {
        if (num % i == 0) { //如果能被某个数整除,循环会提前结束,意味着是达不到最大值 break; } }
         i==num ?document.write('质数'): document.write('合数') 
    // 死循环 多少次可以随机出0 
    var num=0; 
    var flag=true; 
    while (flag){
			a = Math.random();
			num++;
		if (a == 0) {flag = false;}
    }
    console.log(num)

函数的定义方式

            一、
                function 函数名(参数1,参数2){
            代码块
                }
                
            二、
            function 函数名(【参数可以没有】){
            }

            三、
            function abc(){}==>声明函数
            命名方式同 var
            function abc(a,c){} ==>括号内的a,c为形式参数=形参,命名方式同var
            调用 abc(a,c) ==>括号内的a,c为实际参数=实参
            return ==>返回值,可以有返回,也可以直接输出函数;
            见到return ,函数直接结束。

            封装函数:
            1=先把普通功能实现
            2=在外面套一个函数
            3=提取可变值作为参数
            4=考虑是否需要返回值
            5=调用
            在js中形参和实参很随意,数量可以不对等。
            

            变量作用域:
            全局变量==>没有var声明的变量就是全局变量,在文件任何地方都可以使用
            局部变量==>形参实际上是局部变量==>不需要声明。

            作用域:
            如果外部想使用局部变量,就return局部变量;
            全局变量可以在当前文件的任意地方使用,局部变量只能在函数体里使用;
            函数外部和内部都有同一个变量,那函数就会优先调用内部变量。

            js实际执行顺序**
            第一阶段==> 预编译

            1 ==> 把var提到最前面 ---赋值不会被提前
            2 ==> 把函数提升

            第二阶段 执行阶段

函数补充

     一、函数声明方式
        1、声明式函数 ==>有具体函数名
        2、匿名函数
  function(){ console.log(555) }() 
  ==>匿名函数自调用;或事件驱动;一般都是一次性的。
        3、赋值式函数
  var a= function(){
        console.log('666')
    }
    console.log(a())
     二、函数递归
100以内求和
        sum(5= 5 + sum(4)
        sum(4) = 4 + sum(3)
        sum(3) = 3 + sum(2)
        sum(2) = 2 + sum(1)

        function sum1(n){
            return n+sum(n-1);
        }
        //死循环 会报错内存溢出(Maximum call stack size exceeded);
 **demo**
    //斐波拉切数列
	//1 1 2 3 5 8 13 21 34 55

    function fbl(n) {
        if (n == 1) {
            return 1
        }

        if (n == 2) {
            return 1
        }

        return fbl(n - 1) + fbl(n - 2);

    }

    // 欧几里得算法
    // console.log(gcd(7, 15))
    function gcd(a, b) {

        if (a % b == 0) {
            return b
        }
        return gcd(b, a % b)
    }
    //有形参的函数也可以不传入实参,没有形参的函数也可以传入实参;  
    //形参和实参可以不对等;
    //arguments也可以接收实参,如无法确定形参个数可以直接用arguments获取实参
    function ff() {
            //length数组长度
            var sum = 0;
            for (i = 0; i < arguments.length; i++) {
                sum += arguments[i]
            }
            return sum;
        }
	// console.log(ff(1, 2, 3, 4, 5, 6, 7, 8, 9))

// *** 回调函数*** //

// 把另一个函数作为本函数的参数传入函数
    function b(fn) {
        fn();
        // console.log(1)
    }
    b(function () {
        // console.log('cccc')
    })
    // 可以回调多个函数
    function aa(n1, n2) {
        // console.log(1);
        n1();
        // console.log(2);
        n2();
        // console.log(3);
    }

    function bb() {
        // console.log('aaa')
    }

    function cc() {
        // console.log('bbb')
    }
    aa(bb, cc)

数组

数组:就是存储了一组数据==>建议存储同一种数据类型的数据

//数组的声明方式
    var arr1 = [1, 2, 3, 4, 5, 6, 7]
    var arr2 = ['武汉', '天津']
    var arr3 = new Array(1, 2, 3);
    var arr4 = [];
    arr4[0] = 10;
    arr4[1] = 11;
    arr4[2] = 12;
//数组的长度 length==>可以随时改变
//角标 index==>数组的角标是从0开始
//数组的方法
	1/ push arr.push ==>向数组中追加数据
    arr4.push(0, 2, 3)

    2/ pop 删除最后一个数据()内不能有任何值
    arr4.pop()

    3/ unshift 在数组开头追加N个数据,至少一个
     arr4.unshift(100, 101)

    4/ shift 删除最前一个数据()内不能有任何值
    arr4.shift()
//数组的遍历 
	//for循环
		var arr=[1,2,3,4]
        for (var i=0;i<length;i++){
        }

	//for ....in 遍历数组角标
        var arr = [1, 2, 3, 4]
        for (var i in arr) {
        }

	//for ....of遍历数组的值
        for (var value of arr) {
        }

回顾:

1.递归函数
	就是循环的调用函数自身,注意:递归一定要有出口,否则会死循环。
	求和,阶乘,公约数,基本案例等)
2.回调函数
	函数的参数也是一个函数,function aa(fn){fn()}
3.补充:函数的声明方式
	声明式函数
	匿名函数==>一般只会执行一次,事件类触发执行==>自调用
4.函数的参数
	arguments 
	==>获取arguments也可以接收实参;如无法确定形参个数可以直接用arguments获取实参。
	注意:arguments.length可以判断输入了几个实参。(案例:N个数的和)
5.数据类型
	基本数据类型    number,boolean,string,undefind,null
	引用数据类型    数组array,对象object,函数function
6.数组
	数组的定义方式 
	数组的两个概念
		长度 length ==>数组的值个数
		角标 index ==>0开始
7.数组的基本方法
		a.push ==>数组最后添加N个值,至少一个;
		b.pop ==>删除最后一个值;
		c.unshift ==>数组最前添加N个值,至少一个;
		d.shift ==>删除最前一个值;

8.数组的遍历
		a.for循环
		b.for... in  角标
		c.for... of/*
1.数组的深拷贝和浅拷贝-->
		浅拷贝-->地址,改变一个会影响另一个
		深拷贝-->值,两个数组不会影响

2.函数值传递和引用传递
		基本数据类型传递的是值
		引用数据类型传递的是地址

3.基本数据类型和引用数据类型
		基本数据类型 -->存储值:栈
		引用数据类型 函数function 对象object Array数组  -->存储值:堆
*/

数组方法

基本方法

  • a.push
  • a.pop
  • a.unshift
  • a.shift

常用方法

  • splice(index,howmany,item)–> 角标,数量,插入的项;返回被删除的数据形成的新数组。
  • includes(item)–>是否包含item的值,返回true或false;
  • indexOf(item)–>是否包含item的值,返回角标;
  • concat()–>拼接任意值
  • join(’’)–>把数组转换为字符串
  • reverse()–>把数组倒序排列
  • slice(index,howmany)–>截取数组中的某些值,返回截取的数组;(没有参数就是深拷贝)
//demo
var arrslice = [1, 2, 3, 4, 5, 6]
console.log(arrslice.slice(1, 2))

扩展方法

  • map()–>把数组的值进行统一的操作,return新数组
  • sort()–>把数组排列
  • sort(function(a,b){return a-b}升序
    sort(function(a,b){return b-a}倒序
  • smoe(function(val){retun val>60})–>判断是否有满足条件的值,返回true/false;
  • every(function(val){retun val>60})–>判断是否所有值满足条件,返回true/false;
  • filter(function(val){retun val>60})–>把满足条件的值返回新数组
  • forEach(function(){})–>只是遍历数组
  • reduce(function(sum,val,index){return sum;})–>求数组内值的和,乘积等等,返回一个值,sum

字符串

字符串生成方式:

//字面量生成
    var str='a';
    var str1=new String{'hello'}
//字符串也有角标index和长度length;

字符串和数组的区别
字符串的角标和长度都可以获取,但是不能更改。

字符串常用方法

  • str1.toUpperCase() 转换为大写字母
  • str1.toLowerCase() 转换为小写字母
  • str1.charCodeAt(index) 访问指定角标对应的字符ASCII值
  • String.fromCharCode(ASCII值) 把ASCII值转换为字母

字符串补充方法

  • .includes()–>判断是否包含单个字符或字符串 返回true/false;
  • .indexOf()–>判断是否包含单个字符或字符串 返回index/-1;
  • .trim()–>去掉字符串首尾空格()为空;
  • .substring(from,to)–>截取其中一部分;
  • .substr(index,howmany)–>截取其中一部分;
  • .replace(‘我草’,‘wc’)–>替换;
  • .split(方式)–>切割字符串为数组–>不加空格逐字切割;数组转字符串.join()
  var str='hello';
                console.log(str.split(''))

时间对象

        Date
        1.无参数创建 
        var date = new Date
        2。设定参数
        var date2 = new Date(0) 1970年时间
        3.设定具体时间(年,月,日,小时,分钟,秒)月从0开始
        var date2 = new Date(2020, 1, 1)
        4.字符串参数
        设定具体时间(年,月,日,小时,分钟,秒)
        var date3 = new Date('2020-2-2 0:0:0')

        获取时间
        var year = date.getFullYear()   年份
        var month = date.getMonth() 月份从0开始
        var day = date.getDate() 日期
        var day = date.getDay() 星期
        var hour = date.getHours() 小时
        var Minutes = date.getMinutes()
        var Seconds = date.getSeconds() 

        定时器
        setInterval(参数1 ,间隔时间)参数1-->做的事情
        clearInterval()清除定时器,一次只能清除一个
        定时器存储的是页面上的第几个定时器
        同步和异步定时器是一个异步程序,先执行同步程序,再执行异步程序;
        同步:逐个顺序进行的; 
        异步以同时进行的事情。
DEMO ==>最大天数计算
// 本月月最大天数
	//设定初始时间new Date()无参数为系统当前时间
	var date2 = new Date()
	//设定月份
	date2.setMonth(date2.getMonth() + 1)
	//设定日期为0,则表示为下个月的第0天,就是本月最后一天
	date2.setDate(0)
	//获取设定后日期即为最大天数
	var nowDate2 = date2.getDate()
	//检测一下
	console.log("本月天数" + nowDate2)
// 本月月最大天数

// 上个月最大天数
	var date1 = new Date()
	date1.setMonth(date1.getMonth()) // 设置月份为当月
	date1.setDate(0) //天数为当月的第0天-->就是上个月最后一天
	var beforeMon = date1.getDate()
	console.log("上月天数" + beforeMon)
// 上个月最大天数

// 下个月最大天数
	var date = new Date()
	date.setMonth(date.getMonth()+2) // 设置月份为当月
	date.setDate(0) //天数为当月的第0天-->就是上个月最后一天
	var afterMon = date.getDate()
	console.log("下月天数" + afterMon)
// 下个月最大天数


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值