zoukankan      html  css  js  c++  java
  • JavaScript学习笔记

    JavaScript

    JavaScript的组成:

    • ECMAScript 5.0:定义了js的语法标准:包含变量,表达式,运算符,函数,if语句 for循环,while循环,内置的函数
    • DOM: 操作网页上的api,一些皆对象,比如html标签
    • BOM: 操作浏览器部分功能的API,比如说刷新页面、前进、后退、让浏览器自动滚动

    ECMAScript 5.0

    • 所有的变量都挂在到了全局对象window

    javascript的引入方式:

    • 内接式:
    <script type="text/javascript">
    
    </script>
    
    • 外接式:
    <!--相当于引入了某个模块-->
        <script type="text/javascript" src="./js/index.js"></script>
    

    注释

    //这个是注释
    

    变量的使用

    在js中使用的是var关键字声明变量,js语言是一个弱类型的语言

        <script type="text/javascript">
            // 1.变量的声明和定义(赋值)
            var a = 10;
            alert(a);
    
            // 2.先声明变量 未来定义
            var b;
            b = '200';
            console.log(a);
            console.log(b);
            
            var c;
            //Uncaught ReferenceError: c is not defined c没有定义
            console.log(c);//undefined 未定义
    
        </script>
    
    • 变量的命名规范
    // 变量名有命名规范:只能由英语字母、数字、下划线、美元符号$构成,且不能以数字开头,并且不能是JavaScript保留字。
    bstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto
    implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile
    

    基础数据类型

    js基本的数据类型:

    1. number   数字类型
    2. string   字符串类型
    3. boolean  布尔类型(True False)
    4. null     空值
    5. undefined    未定义
    

    数字类型

    <script type="text/javascript">
            // typeof 变量名
            var a = 100;
            console.log(typeof a); //number
    
            var b = 5/0;
            console.log(b);//Infinity 无限大
            console.log(typeof b)//number
        </script>
    

    字符串类型

    • ‘+’ 号可以表示连字符,也可以是数字相加。字符串+数值相当于字符串拼接,数字加数字相当于相加
    <script type="text/javascript">
    
            var c = 'abc';//可以使用单引号或者双引号表示字符串
            console.log(typeof c);//string
    
            var d = 'abc'+'cbd'+1;
            console.log(d);//abccbd1
    
            //将数值类型转换成字符串类型
            var e = 10+'';
            console.log(typeof e);//string
    
        </script>
    

    其他三种数据类型

        <script type="text/javascript">
            //布尔类型
            var isshow = false;
            console.log(isshow);//false
            
            //空对象
            var a = null;
            console.log(typeof a);//object空对象
            
            // null
            var b;
            console.log(b);//值是 undefined
            console.log(typeof b)//undefined是数据类型
            
        </script>
    

    复杂(引用)的数据类型

    • Function 相当于python中的函数,def
    • Object 相当于python中的字典,dict
    • Arrary 相当于python中的字典,list
    • Date 相当于python中的time模块

    JavaScript比较运算符的特殊情况

    • JavaScript的运算符与python基本上类似,只是javascript多了一个++&-- 自增自减运算符,还有== === 以及!==(不等同于,值和类型有一个不相等,或者两个都不相等)与!=(不等于)比较运算

    • 比较运算符特殊情况代码:

        <script type="text/javascript">
    
    //        var a = 5;
    //        var b = a++;//先将a赋值给b 然后a进行自增+1
    //        console.log(a);//输出6
    //        console.log(b);//输出5
    //         var a = 5;
    //         var b = ++a;//先进行a++ 然后再将a++的值(6)赋值给b
    //         console.log(a);//6
    //         console.log(b);//6
            var x = 5;
            var y = '5';
            // console.log(x == y);//true  ==比较的是值相同
            console.log(x === y);//false === 比较的是值和数据类型(内存地址)
            
    
        </script>
    

    数据类型转换

    数值类型转字符串类型

    <script type="text/javascript">
        // 数值类型转字符串类型
            //1.隐式转换
            var n1 = 123;
            var n2 = '123';
            var numStr = n1+n2;
            console.log(typeof numStr);//string
            //2.强制转换
            //内置函数:toString()
            var n3 = 100;
            var StrNum = n3.toString();
            console.log(typeof StrNum);//string
    
            //内置函数:String()
            var n4 = 100;
            var strNum = String(n4);
            console.log(typeof strNum)//string
    </script>
    

    字符串类型转数值类型

    <script type="text/javascript">
    
        var stringNum1 = '12345';
        var num1 = Number(stringNum1);
        console.log(typeof num1);//number
    
        var stringNum2 = '1234dhwjuijdwio';
        var num2 = Number(stringNum2);
        console.log(typeof num2);//number
        console.log(num2);//NaN Not a Number  不是一个数值,但是强制转换成了数值类型
    
        // 解析字符串中的整数 内置方法:parseInt()
        var num3 = parseInt(stringNum2);
        console.log(num3);//stringNum2 = '1234dhwjuijdwio'; num3 = 1234
    
        // 解析字符串中的浮点型 内置方法:parseFloat()
        var stringNum3 = '1.2546dw485dwdhf';
        var num4 = parseFloat(stringNum3);
        console.log(num4);//1.2546
    
    </script>
    

    流程控制

    if

        <script type="text/javascript">
            // if
            var age = 20;
            if(age > 18){
                //{}相当于一个作用域
                console.log('在if里面,条件为真时执行');
            }
            console.log(1111);
        </script>
    

    if - else

        <script type="text/javascript">
            var age = 18;
            if(age==18){
                console.log('今年十八岁');
            }else{
                console.log('管你今年多少岁')
            }
        </script>
    

    if-else if-else

        <script type="text/javascript">
            //if - else if -else
            var age = 20;
            if(age==18){
                console.log('今年十八岁');
            }else if(age >= 20) {
                console.log('今年大于十八');
            }else{
                console.log('今年小于十八');
            }
            console.log('执行完啦')
        </script>
    

    逻辑与&& 逻辑或||

    • 逻辑与相当于python中的and
    // 逻辑与:如果a大于5 并且b大于10,只有两个条件同时成立才打印条件成立
        var a = 10;
        var b = 20;
        if(a > 10 || b > 10){
            alert('在if里面');
        }else{
            alert('判断失败')
        }
    
    • 逻辑或||相当于python中的or
    // 逻辑或:如果a大于10 或者b大于10,只要其中一个条件成立便打印条件成立
        var a = 10;
        var b = 20;
        if(a > 10 || b > 10){
            alert('在if里面');
        }else{
            alert('判断失败')
        }
    
    

    switch

    • case穿透:switch语句 case表示一个条件,满足这个条件就会输出,直到遇到break跳出,如果break不屑,那么程序会遇到下一个break停止
    var gamescore = 'good';
        switch (gamescore) {
            case 'good':
                console.log('还可以');
                break;
            case 'better':
                console.log('合格');
                break;
            case 'best':
                console.log('优秀');
                break;
            default:
                console.log('回家种田吧');
                break;
        }
    

    while循环

    // 使用while循环将1~100所有是2的倍数在控制台打印
        //初始化循环变量
        var i = 1;
        //判断循环条件
        while (i <= 100){
            if (i%2==0) {
                console.log(i);
            }else {
                console.log('不是2的倍数');
            }
            i++;//更新循环变量
        }
    

    do-while

    • 用途不大
    • 不管条件如何,上来先做一次,然后再去循环
    // 先执行一次do作用域内部的代码,然后再判断条件是否继续循环
        var i = 3;
        do {
            console.log(i);
            i++;
        }while(i<2);
    

    for循环

    // 计算100之间所有数的和
    
        //i = 1  初始化循环变量
        //i<100  判断循环条件
        // i++   更新循环条件
        var x = 0;
        for (var i = 1;i<=100;i++){
            x +=i;
        }
        console.log(x)
    
    • 双重for循环
    // 在页面上显示等边三角形
    // document.write('喵喵喵')  往页面上写入内容
        for (var i=1;i<=6;i++){
            for (var s=i;s<6;s++){
                document.write('&nbsp;');
            }//控制空格数量
            for (var j=1;j<=2*i-1;j++){
                document.write('*');
            }//控制每行的输出*数
            document.write('<br>')
        }
        
    // 在页面显示直角三角形
        for (var i=0;i<=6;i++){
            for (var j=1;j<=i;j++){
                document.write('*')
            }
            document.write('<br>')
        }
    

    常用内置对象(复杂数据类型)

    数组:Array

    // 创建列表的两种方式
        // 1.字面量方式:
            var colors = ['red','yello','blue'];
            console.log(colors);
    // 2.使用构造函数(js中创造对象使用的是构造函数)
            var colors = new Array();
            colors[0] = 'red';
            colors[1] = 'yellow';
            colors[2] = 'bule';
            console.log(colors);
    

    数组的常用方法

    • 使用for循环遍历列表
        var colors = ['yellow','red','green'];
        // for循环遍历数组:length函数  返回数组的长度
            for(var i=0;i<colors.length;i++) {
                console.log(i, colors[i])
            }
    
    • 使用forEachd遍历数组

    通过forEach遍历数组的每一项内容,毁掉函数中的参数第一个参数为item(每一项的内容)第二个参数是数组的索引

            var l = ['a','b','c'];
            l.forEach(function (item,index) {
                console.log(item,index)
            })
    
    • cancat:数组的合并
    // 数组的合并
            var north = ['北京','山东','天津'];
            var south = [['北京','山东','天津']];
            var newCity = north.concat(south);
            console.log(newCity);//['北京','山东','天津','北京','山东','天津']
    
    • join:将数组中的元素使用指定的字符串拼接起来,返回一个新的字符串
    // 字符串拼接
        //方式1
        var north = ['北京','山东','天津'];
        console.log(north.join('|'));//北京|山东|天津
        //方式2
        var str = north.join('|');
        console.log(str);//北京|山东|天津
    
    • slice(start,end) 返回数组的一段记录,相当于切片,于python中的切片一样,顾头不顾尾
        //字符串的切片
        var list = ['a','b','c','d'];
        var newlist = list.slice(1,3);
        console.log(newlist);//["b", "c"]
    
    • push:向数组最后添加一个元素,相当于python中的append方法
        var list = ['喵','汪','嗷呜'];
        list.push('嗷');
        console.log(list);//["喵", "汪", "嗷呜", "嗷"]
    
    • reverse 反转数组
        var list = ['喵','汪','嗷呜'];
        list.reverse();
        console.log(list);//["嗷呜", "汪", "喵
    
    • sort:对数组排序

    按照字母进行排序,如果第一个字母相同则比较第二个字母

        var list = ['y','v','d','c','x'];
        list.sort();
        console.log(list)//["c", "d", "v", "x", "y"]
    
    • isArray():判断是否为数组

    返回值为true或者false

        var l = ['a','b','c'];
        var isList = Array.isArray(l);
        if(isList){
            console.log('是数组')
        }else{
            console.log('不是数组')
        }
    

    字符串的常用方法

    • chartAt() 返回指定索引的位置的字符
        var str = 'abc';
        var charset = str.charAt(1);
        console.log(charset);
    
    • concat 返回字符串值,表示两个或多个字符串的拼接
    var str1 = 'abc';
        var str2 = '123';
        var newstr = str1.concat(str2,str1); //可以跟多个参数
        console.log(newstr);//abc123abc
    
    • replace(old,new)字符串替换
        var str = '123456789';
        var newstr = str.replace('123','abc');
        console.log(newstr);//abc456789
    
    • indexof() 查找字符的下标,如果找到返回字符串的下标,找不到则返回-1
        var str = 'abddwdwdasa';
        console.log(str.indexOf('a'));//0
        console.log(str.indexOf('w'));//4
        console.log(str.indexOf('x'));//-1
    
    • slice(start,end) 左闭右开 分割字符串
        var str = 'abcd';
        console.log(str.slice(1,3));//bc
    
    • split('a',1) 以字符串a分割字符串,并返回新的数组。如果第二个参数没写,表示返回整个数组,如果定义了个数,则返回数组的最大长度

    与python中的split方法一样

        var str = 'abcd|aa|dd|ccc';
        var strlist = str.split('|');
        console.log(strlist);//["abcd", "aa", "dd", "ccc"]
    
    • substr(statr,end) 左闭右开与slice方法一样
    //顾头顾尾
        var str = 'abcd';
        console.log(str.substr(1,3));//bcd
    
    • toLowerCase()转小写
        var str = 'ABCDE';
        console.log(str.toLowerCase());//abcd
    
    • toUpperCase()转大写
        var str = 'abcde';
        console.log(str.toUpperCase());//ABCDE
    
    • 去除字符串首尾空格与换行

    与python中的strip方法一样

        var str = '       a       ';
        console.log(str.trim());//a
    
    • 特别:
    //1.将number类型转换成字符串类型
    var num = 132.32522;
    var numStr = num.toString()
    console.log(typeof numStr)
    //四舍五入
    var newNum = num.toFixed(2)
    console.log(newNum)
    

    Math内置对象

    方法 含义
    Math.floor() 向下取整,称为地板函数
    Math.ceil() 向上取整,称为天花板函数
    Math.max(a,b) 求a和b中的最大值
    Math.min(a,b) 求a和b中的最小值
    Math.random() 随机数,默认0-1之间的随机数
    • 随机数计算公式:min+Math.random()*(max-min),求min~max之间的数
        var num = 100+Math.random()*(300-100);
        console.log(num.toFixed());
        // toFixed()取整
    

    函数

    函数:就是将一些语句进行封装,然后通过调用的形式,执行这些语句,函数的作用:解决大量的重复性语句,简化编程使编程模块化

    与python中的函数基本类似,只是声明方式有所不同,JavaScript的函数调用可以在任意地方调用

    //声明函数的方式
            //方式1
            function func(x,y){
                return x + y;
            }
            console.log(func(1,2));
            //方式2:匿名函数
            var func2 = function (x,y){
                return x+y;
            }
            console.log(func2(3,2))
    

    JavaScript的面向对象

    JavaScript创建对象的方法(部分)

    1. 使用Object或对象字面量创建对象
    2. 工厂模式创建对象
    3. 构造函数模式创建对象
    4. 原型模式创建对象
    • 使用Object或对象字面量创建对象
        //使用Object字面量创建对象
        var person = new Object();
        //给对象赋值
        person.name = 'wualin';
        person.age = 20;
        console.log(person);
    
        //字面量方式1:对象中的函数以匿名函数传给对象函数
        var person2 = {
            name : 'wualin',
            age :22,
            func:function () {
                //this相当于python中的self,指的是对象本身
                console.log(this)
            }
        };
        //方式2:先定义好函数然后再将函数传入对象中
        var person3 = {
            name:'小黑',
            age:12,
            func:func
        };
        function func () {
            console.log(this)
        }
    
        //调用对象中的方法与属性
        person3.func();//调用方法
        console.log(person3.name);//调用属性
    
    • 工厂模式创建对象
      像工厂车间一样不停的生产对象,避免代码冗余,调用几次就生成几个对象
        //工厂模式创建对象:避免代码重复
        function ceratePerson(name,age){
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            return obj;
        }
        var person1 = ceratePerson('alex',21);
        var person2 = ceratePerson('wualin',22);
        console.log(person1 instanceof Object);//instanceof判断某某是某某,返回值是true或者false
    
    • 构造函数模式创建对象:使用new关键字来创建对象
        // 使用构造函数创建对象
        //与python中类似,用来区分对象是属于哪个类型的
        //函数名首字母大写
        function Person(name,age){
            this.name = name;
            this.age = age;
        }
        var p1 = new Person('alex',21);
        console.log(p1 instanceof Person);//判断p1是不是Person类
    
    • 原型模式创建对象
        //原型模式创建对象 propotype 它是当前类的父类
        function Person(name,age) {
            this.name = name;
            this.age = age;
    
        }
        //prototype相当于继承
        Person.prototype.alterNanem = function () {
            alert(this.name)//this相当于Person
        };
        var p1 = new Person('alex',18);//对象继承父类的方法
        p1.alterNanem();
    

    补充

    arguments的使用

    arguments伪数组,有数组的索引以及length属性,但是没有数组的方法

        function add () {
            console.log(arguments);
            for (var i=0;i<arguments.length;i++){
                console.log(arguments[i]);
            }
        }
        add('wualin','miao')
    

    Date的使用

            //使用构造函数创建一个时间对象
            var myDate = new Date();
    		console.log(myDate);
    
    		// 获取本地时间  月份中第几天(1~31)
    		console.log(myDate.getDate());
    
    		// getMonth()  获取指定日期对象月份(0~11)
    		console.log(myDate.getMonth()+1);
    
    		//  返回四位数的年份
    		console.log(myDate.getFullYear());
    
    		// 0 代指的是星期天
    		// getDay() 返回一星期中星期几   0~6
    		console.log(myDate.getDay());
    
    		//getMinutes() getSecond()
    		console.log(myDate.getMinutes());
    		console.log(myDate.getSeconds());
    
    		// 返回本地时间
    		console.log(myDate.toLocaleString())
    

    Json的用法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。

    json的两种结构:对象&数组

    • 对象
        //对象
        var packJSON = {"name":"wualin","age":29};
    
    • 数组
        //数组
        var packJSON = ["wualin","miao","alex"];
    
    • JSON对象和JSON字符串转换
    • 字符串转json对象
        //字符串转json
        var jsonStr = '{"name":"wualin","age":29}';
        var jsonobj = JSON.parse(jsonStr);
        console.log(jsonobj.name);
    
    • json对象转字符串
        //json对象转字符串
        var jsonObj = [{"name":"wualin","age":29},{"name":"alex","age":19}];
        var jsonStr = JSON.stringify(jsonObj);
        console.log(jsonStr);
        console.log(typeof jsonStr);
    
    • 遍历JSON对象和JSON数组
    1. 遍历JSON对象
        //遍历json对象
        var jsonobj = {"name":"wualin","age":19};
        for (var key in jsonobj){
            console.log(key + ' ' + jsonobj[key]);
        }
    
    1. 遍历json数组
        var list = [1,2,3,4,5,6,7,8];
    
        for (var i in list){
            console.log(i,list[i])
        }
    
  • 相关阅读:
    [转载] 长草颜文字的写给未来
    [彩蛋题] egg
    最近发现一些项目ignore文件没有生效,请使用下面方式清理下Cache
    freemarker显示含有html代码的内容
    数字化技术促进电网转型发展
    停更的时间里,我也在好好生活和工作
    iOS 开发问题集锦(一)
    SVN 在 Xcode中的状态说明
    virt-v2v命令将ESXI 虚机迁移到OpenStack中
    修改openstack镜像--支持root密码登陆
  • 原文地址:https://www.cnblogs.com/wualin/p/10021880.html
Copyright © 2011-2022 走看看