• Javascript


    Javascript

    ECMAScript和JavaScript的关系

      1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。

      该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标,JavaScript本身已被Netscape注册为商标。二是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。

      因此ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现

    ES6就是指ECMAScript 6版本。

    1. js代码引入

    方式1:
        <script>
            alert('欢迎来到德玛西亚!')		# 浏览器弹框
        </script>
        
    方式2:外部文件引入
    	# src属性值为js文件路径
    	<script src="test.js"></script>
    

    2. 数据类型 var

    JavaScript中的语句要以分号(;)为结束符。和缩进没关系。

    注释:

    // 单行注释
    /*
        多行注释1
        多行注释2
    */
    

    数值类型(number)

    var a = 1;
    var b = 1.1;
    var c = 123e5;	#e5:10的5次方
    var d = 123e-5;
    
    var num = 2.379
    var newNum = num.toFixed(2)		# 保留两位小数
    
    typeod a;	# number
    typeof b;	# number
    

    字符串(string)

    var a = '字符串';
    typeof a;	# string
    

    字符串转数值类型

    parseInt:
    	var a = '111';
    	var b = parseInt(a);
    	typeof b;		//'number'
    	
    	
    parseFloat:
    	var a = '1.11';
    	var b = parseFloat(a);
    	
    var a = 'aaa1';
    var b = parseInt(a);
    	b =NaN		NaN 是not a number
    	typeof b;	# number类型 NaN和NaN不相等
    

    字符串相关方法

    字符串拼接 +:
    	var a = "Hello"
    	var b = "world"
    	var c = a + b; 
    	console.log(c); --- Helloworld
    
    
    .length 查看字符串长度
    	示例:  
    		var c = 'hello';
    		c.length; -- 5
    .trim()  移除两端空格,得到一个新值,不会改变原来的值
    	示例:
    		var a = '   hello   ';
    		var b = a.trim();
    .trimLeft()		# 移除左边的空白
    .trimRight()	# 移除右边的空白
    
    .charAt(n)  找到索引为n的字符
    var c = b.charAt(1);
    
    .concat()  字符串拼接
    	示例:
            var a = 'nihao';
            var b = 'girls';
            var c = a.concat(b);
    
    .indexOf(元素) 查看元素的索引
        示例:
    		var a = c.indexOf('a');
    		var a = c.indexOf('i',3);  参数3的意思是从索引3的位置开始往后找,找到就返回对应的索引值,找不到就返回-1
    
    .slice(n,m) 切片
    	示例:
    		var c = "nihaogirls";
    		var a = c.slice(0,5); -- 'nihao'
    
    .toLowerCase() #全部变小写
    .toUpperCase()  #全部变大写
    	示例:
    		var c = "nihaogirls";
    		var a = c.toUpperCase();
    		
    .split(分隔符,1) 字符串切割
    	示例:
    		var c = "nihaogirls";
    		var a = c.split('g',1);  'g'是切割条件,1是切割后,返回结果的数量
    

    布尔值(boolean)

    var a = true;
    var b = false;
    
    数据类型布尔值:
    	""(空字符串)、0、null、undefined、NaN都是false。
    

    null 和 undefined

    null表示值是空,一般在需要指定或清空一个变量时才会使用,
    如:name=null;
    undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
    
    null表示变量的值是空,undefined则表示只声明了变量,但还没有赋值。
    

    Object类型

    var b = new String('xx');
    var a = 'oo'
    typeof b; 		# object
    typeof a; 		# string
    

    数组 Array

    可以放所有的数据类型。

    var a = [1,2,3]
    typeof a; 		# object
    
    var b = new Array([1,2,3])
    typeof b;
    "object"
    
    数组常用方法
    # 索引[]
    var a = [1,2,3]
    a[0];	// 1
    
    # 切片slice(起始,终止)
    var b = a.slice(0,2)	// [1,2]
    
    # 长度length
    a.length;		// 3
    
    # 尾部增加push
    a.push(元素);
    a.push(4);		// [1,2,3,4]
    
    # 尾部删除pop
    var b = a.pop();
    console.log(b);		// 4
    
    # 首部插入unshift
    a.unshift(元素)
    a.unshift(0);	// [0,1,2,3]
    
    # 首部删除shift
    a.shift()	// [1,2,3]
    
    # 反转 reverse()
    a.reverse();	// [3,2,1]
    
    # 字符串拼接 数组.join('连接符')
    var a = ['a','b','c'];
    var b = a.join('_');	// "a_b_c"
    
    # 数组合并 数组1.concat(数组2)
    var a = [1,2,3];
    var b = ['a','b'];
    var c = a.concat(b);	
    	//[1, 2, 3, "a", "b"]
    
    # 排序 sort
    var b = a.sort()	// 转换成字符串,按ASCII码排序
    
    # 真正的排序(冒泡):
    function sortNumber(a,b){
    	return a-b			// a-b是升序   b-a是降序
    };
    var b = a.sort(sortNumber);
    /*
    若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
    若 a 等于 b,则返回 0。
    若 a 大于 b,则返回一个大于 0 的值。
    */
    
    # 删除元素splice(开始位置,删除个数,替换值(可以多个))
    var a = [1,2,3]
    a.splice(1,1,4,5,6)		//a [1,4,5,6,3]
    

    splice()

    语法:

    splice(index,howmany,item1,.....,itemX)

    参数:

    参数 描述
    index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
    howmany 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
    item1, ..., itemX 可选。要添加到数组的新元素

    自定义对象----字典

    var a ={'键1':'值1','键2':'值2'}	
    // 键可以不加引号
    
    // 取值的两种方法:
    a['键'];		// 取值时要加引号
    a.键;
    
    示例:
    var a = {'k1':'v1',k2:'v2'};
    a["k1"]		// "v1"
    a.k2		// "v2"
    

    Symbol 类型

    ​ es6 新引入的一种新的原始数据类型,表示独一无二的值。

    3. 类型查询 typeof

    typeof 是一个一元运算符,不是一个函数、语句。

    4. 运算符

    算术运算符

    +  -  *  /  %  ++  -- 
    
    i++,是i自加1,i--是i自减1   
    	i++的这个加1操作优先级低,先执行逻辑,然后再自加1,而++i,这个加1操作优先级高,先自加1,然后再执行代码后面的逻辑。
    
    var a = 1;
    a++ == 2;		# false 先执行判断==, 再加1
    ++a == 3;		# turn 先执行加1, 再判断==
    

    比较运算符

    >  >=  <  <=  ==  ===  !=  !==
    
    ==(弱等于)和===(强等于)区别:
    	弱等于不区分数据类型。
    
    var a=11;
    var b='11';
    
    a==b;			// true
    a===b;			// false
    

    逻辑运算符

    &&  ||  !	 // 与(and) 或(or) 非(not)
    
    示例:
    var a = 1;
    var b = 0;
    var c = 2;
    a&&b	// 0
    a&&c	// 2
    a||c	// 1
    a||b	// 1
    !b		// true
    

    赋值运算符

    =  +=  -=  *=  /=   # n += 1其实就是n = n + 1
    

    5. 流程控制

    单条件

    if (条件){
    	语句1;
    }
    else{
    	语句2;
    };
    
    

    多条件判断

    if (条件1){
    	语句1;
    }
    else if (条件2){
    	语句2;
    }
    else{
    	语句3;
    };
    
    示例:
    var a = 5;
    undefined
    if (a>5){
    	console.log("大于5");
    }
    else if (a<5){
    	console.log("小于5");
    }
    else {
    	console.log("等于5");
    };
    // 等于5
    
    

    switch 切换 (case语句)

    switch (参数){
    	case 1:		// 如果=1,执行
    		console.log('等于1');
    		break;	//	跳出
    	case 2:		// 如果=2,执行
    		console.log('等于2');
    		break;
    	default:		// 都不成立,执行
    		console.log('都不是')
    }
    
    示例:
    var a = 'good';
    switch (a){
        case 'better':
    		console.log('特别好');
    		break;
        case 'best':
    		console.log('非常好');
    		break;
        case 'good':
    		console.log('很好');
    		break;
        default:
    		console.log('很遗憾');
    };
    

    6. for循环

    # 数组
    var a = [11,22,33]
    
    # 方式一:
    for (var i in a){
    	console.log(i,a[i]);
    };
    
    # 方式二:
    for (var i=0;i<a.length;i++){
    	console.log(i,a[i]);
    }
    
    # 自定义对象  不能使用 a.i 取值
    var a ={"k1":'v1',k2:'v2'}
    
    for (var i in a){
    	console.log(i,a[i]);
    };		// i取键,a[i]取值
    /*
    k1 v1
    k2 v2
    */
    

    7. while循环

    有break、continue

    var a = 10;
    var i = 0;
    while (i<a){
    	console.log(i);
    	i++;
    };
    // 执行后i=10
    

    8. 三元运算

    var a = 1;
    var b = 2;
    var c = a > b ? a:b;
    //如果a>b这个条件成立,就把冒号前面的值给c,否则把冒号后面的值给c 
    

    9. 函数

    普通函数

    function 函数名(形参){
        语句;
        return v;	# 只能返回一个值,可加数组返回多个
    }
    函数名(实参);		# 执行函数
    
    示例:
    function fun(a,b){
    	c = a + b;
    	return c;
    };
    
    fun(1,2);	// 3
    

    匿名函数

    var 变量名(函数名) = function(形参){
    	语句;
    };
    
    变量名(实参);
    
    示例:
    var f1 = function(a){
    	console.log(a);
    };
    
    f1('hello');	// hello
    
    

    自执行函数

    (function(形参) {
    	语句;
    })(实参)
    
    伪数组:arguments
    console.log(arguments);
    console.log(arguments.length);	// 获取实参的个数
    console.log(fn.length);         // 获取形参的个数
    
    示例:
    (function(a,b) {
    	console.log(a);
    	console.log(arguments.length);
    })([1,2,3],4);
    // [1, 2, 3]	2
    
    

    函数的全局变量和局部变量

    局部变量

      在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

    全局变量:

      在函数外声明的变量是全局变量,网页上所有脚本和函数都能访问它。

    变量生存周期:

      JavaScript变量的生命期从它们被声明的时间开始。

      局部变量会在函数运行以后被删除。

      全局变量会在页面关闭后被删除。

    作用域

    首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

    var city = "BeiJing";
    function f() {
      var city = "ShangHai";
      function inner(){
        var city = "ShenZhen";
        console.log(city);
      }
      inner();
    }
    
    f();		// ShenZhen
    
    
    var city = "BeiJing";
    function Bar() {
      console.log(city);
    }
    function f() {
      var city = "ShangHai";
      return Bar;
    }
    var ret = f();
    ret(); 		// BeiJing
    
    

    闭包

    和python一样,使用非全局变量

    var city = "BeiJing";
    function f(){
        var city = "ShangHai";
        function inner(){
            console.log(city);
        }
        return inner;
    }
    var ret = f();
    ret();		// ShangHai
    
    

    10. 构造函数(面向对象)

    function Person(name){
    	this.name = name;	// 封装属性
    };
    var p = new Person('aaa'); //实例化对象
    console.log(p.name);
    // aaa
    
    
    // 封装方法
    Perso.prototype.sum = function(a,b){
        return a+b;
    };
    
    p.sum(1,2);		// 3
    
    

    11. Date对象

    //方法1:不指定参数
    var d1 = new Date();	//获取当前时间
    console.log(d1.toLocaleString());  
    //当前时间日期的字符串表示
    
    //方法2:指定参数
    var d2 = new Date("2004/3/20 11:12");
    console.log(d2.toLocaleString());
    var d3 = new Date("04/03/20 11:12");  //  月/日/年(可以写成04/03/2020)
    console.log(d3.toLocaleString());
    
    //方法3:参数为毫秒数,了解一下就行
    var d3 = new Date(5000);  
    console.log(d3.toLocaleString());
    console.log(d3.toUTCString());  
     
    //方法4:参数为年月日小时分钟秒毫秒
    var d4 = new Date(2004,2,20,11,12,0,300);
    console.log(d4.toLocaleString());  //毫秒并不直接显示
    
    

    date对象的方法:

    var d =new Date();
    
    d.getDate()    // 获取日
    d.getDay ()   //获取星期 ,数字表示(0-6),周日数字是0
    d.getMonth ()   //获取月(0-11,0表示1月,依次类推)
    d.getFullYear ()   //获取完整年份
    d.getHours ()      // 获取小时
    d.getMinutes ()    //获取分钟
    d.getSeconds ()    //获取秒
    d.getMilliseconds () //获取毫秒
    d.getTime ()   // 返回累计毫秒数(从1970/1/1午夜),时间戳
    
    

    12. JSON

    var a = {'name':'alex','age':18};
    var b = JSON.stringify(a);		
    // 序列化"{"name":"alex","age":18}"
    
    var c = JSON.parse(b);			
    // 反序列化{name:"alex",age:18};
    
    

    13. RegExp对象(正则)

    # 两种方式:
    // 1.
    var reg = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$");
    //2.
    var reg = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/;	//常用这种方式
    
    var s = 'abcdef';
    reg.test(s);	// true  判断s是否符合定义的正则表达式。
    
    注意事项:test()	空时
    reg.test();		// 没有传参,如果undefined也符合表达式,也会返回true
    
    

    正则结合的方法:

    match:查找字符串中符合正则的内容 
    s.match(/o/);
    s.match(/o/g)	# g匹配所有
    
    search:通过元素找索引,不能用g
    s.search(/o/);
    
    split:分割
    s.split(/o/)
    
    replace:替换
    s.replace(/o/g,'xx');
    s.replace(/o/gi,'xx');		# i不区分大小写
    
    
    注意事项1:
    如果reg带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性reg.lastIndex所指定的索引处开始查找。该属性值默认为0,所以第一次仍然是从字符串的开头查找。
    当找到一个匹配时,test()函数会将reg.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
    当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
    因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将reg.lastIndex的值重置为0(reg.lastIndex=0)。
    如果test()函数再也找不到可以匹配的文本时,该函数会自动把reg.lastIndex属性重置为 0。
    
    
    # 循环判断是否符合正则:
    var s = 'alex is a xxx';
    var reg = /a/g;
    reg.test(s);		// true
    reg.lastIndex;		// 1
    reg.test(s);		// true
    reg.lastIndex;		// 9
    reg.test(s);		// true
    reg.lastIndex;		// 12
    reg.test(s);		// false
    
    注意事项2:
    在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号,把匹配规则写的确定一些,尽量不用/xxx/
    
    var reg = /foo/g;
    reg.test('foo');		// true
    reg.test('xxxfoo');		// true
    
    

    Math对象

    不需要new来创建对象,直接使用Math。

    Math.方法(参数)

    Math.abs(x)      返回数的绝对值。
    exp(x)      返回 e 的指数。
    floor(x)    小数部分进行直接舍去。
    log(x)      返回数的自然对数(底为e)。
    max(x,y)    返回 x 和 y 中的最高值。
    min(x,y)    返回 x 和 y 中的最低值。
    pow(x,y)    返回 x 的 y 次幂。
    random()    返回 0 ~ 1 之间的随机数。
    round(x)    把数四舍五入为最接近的整数。
    sin(x)      返回数的正弦。
    sqrt(x)     返回数的平方根。
    tan(x)      返回角的正切。
    
    
  • 相关阅读:
    9.Nginx常用模块
    8.Nginx基本概述
    7.HTTP协议
    6. SSH远程管理服务实战
    5. Sersync实时同步
    docker 安装 rabbitMQ服务器
    rabbitmq pika(python)订阅发布多客户端消费场景简单使用
    rabbitmq和kafka大概比较
    flask接收跨域请求
    命令提示符出现-bash-4.1$如何解决
  • 原文地址:https://www.cnblogs.com/yzm1017/p/11537509.html
Copyright © 2020-2023  润新知