欢迎来到十九分快乐的博客

生死看淡,不服就干。

1.js基础1

js 基础一

1.js引入

//第一种引入方式:内嵌 推荐使用
    <script>
        alert("第一种引入")       	//浏览器弹出
        console.log("第一种引入")	//控制台打印
        document.write("第一种引入") //页面显示
    </script>
//第一种引入方式:导入
	<script src="./1.js"></script> //导入.js文件
//第三种引入方式:事件
    <div onclick="alert('hello world')"> 点我 </div> //单击事件触发
//第三种引入方式:行内 不推荐
	<a href="javascript:alert('hello world2')">点我</a> 

2.注释/变量

1.注释分两种:
    // 	  单行注释
    /**/  多行注释
2.变量
	var关键字指定当前变量的作用域,全局或者局部
    let指定当前变量为局部变量
 	不写var也可以,默认指定全局变量,没有局部的概念
	var a=1,b=2
    let x=10
3.变量命名 :与python一样(字母数字下划线...)
	特殊的变量名:$
		var $=1,$a=2
	

3.数据类型

    <script >
        /*
        数据类型:分为两大类
        基础数据类型(原始类型):Boolean,Number,String,null,undefined(未定义)
        引用数据类型(复杂类型):Object(对象类型) [Array(数组),function,Date(时间),RegExp(正则)]
        本质一切皆对象
        */

        // 1.Boolean 布尔类型
            var a=true
            var a=false
            console.log(a,typeof(a)) //false "boolean"

        // 2.Number 数字类型
            var a = 0b11    // 0o八进制,0x十六进制
            var a = 3.3
            console.log(a,typeof(a)) // 3.3 "number"
        // 特殊的关键字: NaN => not a Number(不是一个数字)
        /*
            NaN 注意点:
                1.NaN和数字不能参与运算
                2.除了NaN != 任何值为真,其他都为假
        */
            var a = 11 - "aa"    // NaN "number"
            var a = NaN == NaN   // false "boolean"
            var a = NaN != NaN   // true "boolean"
            var a = NaN + 11     // NaN "number"
            console.log(a,typeof(a)) 

        // 3.String 字符串类型
            var a = 'hello'     // 单引号
            var a = "hello"     // 双引号
            var name = "贾英贺" 
            var a = `我叫${name} 
            我是好人`            // 反引号(支持跨行,解析变量:${变量名})   
            console.log(a,typeof(a))

        // 4.Object 对象类型
        // (1).字典 Object
            var obj = {} // 定义空字典对象  {} "object"
            var obj = {"a":1,"b":2,"name": "鹰鹤"}
            var obj2 = {a:1,name: "鹰鹤"}  // 与Python不同的是键可以不用双引号
            console.log(obj["name"])  // 此处中括号里必须用引号
            console.log(obj.name)  // 因为是对象,所以可以句点出属性

            obj["name"] = "看的点"  // 修改数据
            obj.height = 157  // 添加数据
            obj["aa"] = 22    // 添加数据
            console.log(obj,typeof(obj))
            console.log(obj instanceof Object) //判断是否为字典类型 instanceof

        // (2).数组 Array
            var arr = []        //定义空数组对象
            var arr = [1,2,3]
            arr[0] = 100        //修改内容
            arr[4] = 11         //添加内容 
            arr.push(44)        // 向尾部追加数据
            arr.unshift(66)     // 向头部添加数据
            console.log(arr,typeof(arr)) //[100, 2, 3, empty, 11] "object"
            console.log(arr[3]) // undefined 没定义
            console.log(arr instanceof Array) //判断是否为数组类型

        // (3).函数 function
            function func(){
                console.log("我是函数...")
            }
            func()  // 我是函数...
            console.log(func instanceof (Array,Number,Function)) // 判断函数属于他们中一个就为真
   
        // 5.特别的关键字: null undefined
            // null 空(等价于python中的None)
            var a = null
            console.log(a,typeof(a))    // null "object"
            // undefined 为定义的
            var b;
            var b = undefined;
            console.log(b,typeof(b))    //undefined "undefined"
   </script>
判断数据类型
<script>
// 1. typeof
typeof 2 输出 number 
typeof null 输出 object 
typeof {} 输出 object 
typeof [] 输出 object 
typeof (function(){}) 输出 function
typeof undefined 输出 undefined 
typeof '222' 输出 string 
typeof true 输出 boolean

// 2. instanceof  # 判断已知对象类型的方法.instanceof 后面一定要是对象类型
var c= [1,2,3]; 
var d = new Date(); 
var e = function(){alert(111);}; 
var f = function(){this.name="22";}; 
console.log(c instanceof Array) //true
console.log(d instanceof Date) //true
console.log(e instanceof Function) //true
console.log(f instanceof function ) //false

// 3. constructor  # 根据对象的constructor判断,返回对创建此对象的数组函数的引用
var c= [1,2,3]; 
var d = new Date(); 
var e = function(){alert(111);}; 
alert(c.constructor === Array) ----------> true
alert(d.constructor === Date) -----------> true
alert(e.constructor === Function) -------> true
//注意: constructor 在类继承时会出错

// 4. prototype # 所有数据类型均可判断:Object.prototype.toString.call

var gettype=Object.prototype.toString
gettype.call('aaaa') 输出 [object String] 
gettype.call(2222) 输出 [object Number] 
gettype.call(true) 输出 [object Boolean] 
gettype.call(undefined) 输出 [object Undefined] 
gettype.call(null) 输出 [object Null] 
gettype.call({}) 输出 [object Object] 
gettype.call([]) 输出 [object Array] 
gettype.call(function(){}) 输出 [object Function]

// 5. js判断字典对象是否为空{}
    -- JSON.stringify(obj_dic) === '{}'
    
// 6. js 判断数字是否为空[]
    -- lis.length === 0
</script>

4.数据类型转换

    <script>
        // 一.强制转换
            // 1.强转数字类型: Number(parseInt,parseFloat,Number)
            // (1).强转整型:parseInt 数字开头即可转换
                var a = "123"       //123 "number"
                var a = "123abc"    //123 "number"
                var a = "123.45"    //123 "number"
                var a = "abc123"    //NaN "number"
                var a = []          //NaN "number" 
                var a = {}          //NaN "number"
                var a = true        //NaN "number" 布尔类型不能转换
                var res = parseInt(a)
                console.log(res,typeof(res))

            // (2).强转浮点型: parseFloat 数字开头即可转换 可以保留小数 其他与(1)一样
                var a = "123"       //123 "number"
                var a = "123.45"    //123.45 "number"
                var res = parseFloat(a)
                console.log(res,typeof(res))

            // (3).Number 类型强转 可以转换布尔类型,也可以转换纯数字的字符串
                var a = false       //0 "number"
                var a = true        //1 "number"
                var a = "123"       //123 "number"
                var a = "123.45"    //123.45 "number"
                var a = "123abc"    //NaN "number"
                var res = Number(a)
                console.log(res,typeof(res))

            // 2.强转字符串类型: String 单纯的在数据两边套上引号,表达字符串类型
                var a = 123         //123 string 
                var a = []          // string
                var a = null        //null string
                var a = undefined   //undefined string
                var a = NaN         //NaN string
                var res = String(a)
                console.log(res,typeof(res))

            // 3.强转布尔类型: Boolean 有7中情况为假
                var a = 0           //false "boolean"
                var a = 0.0         //false "boolean"
                var a = ""          //false "boolean" 空字符串
                var a = false       //false "boolean"
                var a = null        //false "boolean"
                var a = undefined   //false "boolean"
                var a = NaN         //false "boolean"
            // 注意点 空数组,空字典是真值
                var a = []          //true "boolean"
                var a = {}          //true "boolean"
                var res = Boolean(a)
                console.log(res,typeof(res))

        // 二.自动转换
            // 1.Number + Boolean 布尔向数字转换
                var res = 123 + true    //124 "number"
                var res = 123.45 - true //122.45 "number"
                console.log(res,typeof(res))

            // 2.Number + Boolean + String
            // (1).对于字符串的自动转换,+号的作用是拼接
                var res = true + "123"   //true123 string
                var res = 123 + "456"    //123456 string
                var res = 11 + 22 + "99" //3399 string 前两计算后,与后一个拼接
                console.log(res,typeof(res))
            // (2).除了+号,其他符号都可以参与运算
                var res = 100 - "99"      // 1 "number"
                var res = 3 * "5"         // 15 "number"
                var res = 1/false         //Infinity "number" 无限大
                var res = 3 * "abc"       //NaN "number"
                console.log(res,typeof(res))
    </script>

5.与python不一样的运算符

    <script>
        // 1.++ -- 递增 递减
            var num = 10
            var res = num++
            console.log(res,num) //10 11 先赋值再自增
            var num = 10
            var res = ++num
            console.log(res,num) //11 11 先自增再赋值

        // 2. ===  !== 全等于 不全等于  严格比较两个数据: 1.比较值的大小 2.比较值的类型
            var res = "1" === 1  //false
            var res = "1" !== 1  //true
            console.log(res)   
            
        // 3.逻辑与 && =>and ,逻辑或 || => or, 逻辑非 ! =>not
            var num = 10
            if(num > 8 && num < 16){
                console.log("青少年")
            }

        // 4.三元(目)运算符 ? : 表达式?真值:假值
            var num = 5
            var res = num > 0 ? "好人":"坏人"
            console.log(res,typeof(res))   //好人 string
    </script>

6.循环控制

    <script>
        // 一.流程控制 : 分支结构
        // 1.单项分支:
            var num = 22
            if (num > 18){
                console.log("成年了")
            }
        // 2.双项分支:
            var age = 25
            if (age < 18){                
                console.log("未成年")
            }else{
                console.log("成年了")
            }
        // 3.多项分支:
            var age = 10
            if (age > 0 && age < 8){
                console.log("儿童时代")
            }else if (age >= 8 && age < 18){
                console.log("青年时代")
            }else if (age >= 18 && age < 35){
                console.log("壮年时代")
            }else{
                console.log("退出历史舞台")
            }
        // 4.巢状分支:if语句的嵌套
            var fangzi = true
            var chezi = true
            if (fangzi){
                if (chezi){
                    console.log("你可以找对象了~")
                }
            }

        // 二.流程控制: switch ..case..  switch属于严格类型比较:大小和类型
            var date = new Date()
            console.log(date)   //Tue Jan 19 2021 21:35:41 GMT+0800 (中国标准时间)
            var week = date.getDay() //获取星期
            switch(week){
                case 1:
                    console.log("今天是星期一")
                    break
                case 2:
                    console.log("今天是星期二")
                    break
                case 3:
                    console.log("今天是星期三")
                    break
                default:
                    console.log("输入错误~")
                    break
            }

        // 三.流程控制 : 循环结构
        // 1.for 循环
            // for (初始值;判断条件;自增自减的值){代码块}
            for (var i = 1;i < 10 ;i++){
                if (i == 5){   //跳过5
                    continue
                }
                console.log(i)
            }
        // 2.while 循环
            var i = 1
            while(i<10){
                console.log(i)
                i++
            }
        // 3.for(var i in Iterable){代码块} 作用:遍历数据 获取对象索引或键值
            var arr = ["aa","bb","cc","dd"] //创建数组
            for (var i in arr){
                console.log(i) //数组获取的是索引
            }
            var obj = {"jyh":"贾英贺","gtq":"光头强"} //创建字典
            for (var i in obj){
                console.log(i) //字典获取的是键的值
            }
        // 4.for(var i of Iterable){代码块} 作用:变量数据 获取对象的值,但是无法对字典进行遍历
            var arr = ["aa","bb","cc","dd"] //创建数组
            for (var i of arr){
                console.log(i) //数组获取的是值
            }
            for(var i of "abcde"){ //两个方法都可以遍历字符串
                console.log(i)
            }
    </script>

7.函数

    <script>
        // 一.函数
        // 1.普通函数 存在预加载机制 可先调用后定义
            func1()
            function func1(){
                console.log("hello world")
            }
        // 2.匿名函数 没有预加载机制,必须先定义后调用
            var func2 = function(){
                console.log("我是匿名函数~")
            }
            func2()
        // 3.箭头函数
            var func3 = () =>{console.log("我是箭头")}
            func3()
            var func33 = (x,y) =>{console.log(x + y)}
            func33(1,2)
        // 4.闭包函数 内函数使用外函数变量,外函数把内函数返回出来
            function outer(){       //定义函数
                var name = "舒畅"
                function inner(){
                    console.log(`我喜欢的明星是${name}`)
                }
                return inner
            }
            var func4 = outer()     //调用函数
            func4()

        // 二.函数的调用
            // 1.正常调用
                function func(){
                    console.log("我是函数1~")
                }
                func();
            // 2.函数立即执行(普通函数) 函数加括号再()执行
                (function func(){
                    console.log("我是函数2~")
                })();
            // 3.函数立即执行(匿名函数)
            // 方法一:
                (function(){
                    console.log("我是函数3~")
                })();
            // 方法二:
                !function(){
                    console.log("函数在运行4...")
                }();
            // 方法三:
                ~function(){
                    console.log("函数在运行5...")
                }();
            // 方法四:
                +function(){
                    console.log("函数在运行6...")
                }();
            // 方法五:
                -function(){
                    console.log("函数在运行7...")
                }();

        // 三.函数的参数  js中实参与形参不匹配不会报错,区别于python
        /*  
            1.形参与实参
            形参: 1.普通(位置)形参 2.默认形参
            实参: 普通(位置)实参
        */
            function func11(a,b = 10){
                console.log(a,b)
            }
            func11(b=11,c=22)   //11 22 实参没有关键字实参,只有普通实参,按位置往函数传参

        // 2.arguments 计算累加和
            function func22(){
                //arguments相对于python中的*args收集参数,打包成可迭代对象
                var total = 0
                for(var i of arguments){
                    total += i
                }
                return total
            }
            var res = func22(1,2,3,4)   //调用函数
            console.log(res)            //10
    </script>
posted @ 2021-01-20 08:56  十九分快乐  阅读(91)  评论(0编辑  收藏  举报