前端——javascript基础-ECMAScript

JavaScript简介

前端三部分功能定位

HTML:页面的结构

CSS:描述样式

JavaScript:描述行为,用户响应。

JavaScript的组成

ECMAScript :定义了js的语法标准。变量,函数等基础语法。
DOM :操作网页上元素。比如检测到用户点击某个区域时,往html文档里添加div标签,显示某些元素。
BOM:操作浏览器部分功能,刷新页面,后退页面等操作。

ECMAScript

JavaScript的引入方式

三种,一种直接在html里body之后写,一种 src 外接式引入,一种直接在行内写。

<!--建议在body之后书写脚本js代码
 等待所有dom元素标签加载完成后再去执行 -->
 
	<!-- 1.内接式 直接在此写代码 -->
	<script type="text/javascript">

		// ;分号 作为js代码一句话的结束符
      
		//两种注释方式
		// 注释内容
		/*注释内容*/
	</script>
<!-- 2.外接式-->
<head>
    <meta charset="UTF-8">
    <title></title>

    <!--外链式-->
   <script type="text/javascript" src="./js/index.js"></script>

</head>

<!-- 3.行内式-->
<body>
    <p class="" id="" onclick="c()">123</p>
</body>

<script type="text/javascript">

    function c(){
        alert(1)
    }
</script>

javascript得输出方式:

1.document.write('有一首歌叫123')
  	document.write('<span class="span1">233</span>');
	window.document.write()
 2.console.log('我很好');
	 console.error('错误');
	 console.clear();
	 windows.console.log()
3.alert(1);
	window.alert(1);
4.var a = prompt('输入姓名');
  console.log(a);

变量

变量名有命名规范:

  • 只能由英语字母、数字、下划线、美元符号$ 构成,
  • 且不能以数字开头,并且不能是JavaScript保留字。
  • 严格区分大小写
  • 推荐驼峰命名:有多个有意义的单词组成名称的时候,第一个单词的首字母小写,其余的单词首字母大写
	<script type="text/javascript">
		// 在js中使用的var关键字来声明  js语言它是一个弱类型的语言。

        //变量的声明两种方式

		// 1.变量的声明和定义(赋值) 大部分前端工程师 都是使用的这种方式
		var a = 100;
		alert(a);

		// 2.先声明变量  未来定义
		var b;
		b = '200';
		console.log(a);
		console.log(b);
		//数值类型是蓝色,字符串是黑色,在控制台里查看

		var c;
		// 没有var会出错,Uncaught ReferenceError: c is not defined  c 没有定义

        //有var没赋值undifined
		console.log(c);//控制台不报错但是显示:undefined  未定义

	</script>

五种基本数据类型

			1.number
			2.string
			3.boolean
			4.null
			5.undefined
	 	// 1.number 浮点数,整数,正负 大小都是number
	 	//  typeof 变量名 查看数据类型的变量名
	 	var a  = 100;
	 	console.log(typeof a); //控制台查看输出:number

	 	var b = 5/0;
	 	console.log(b); //Infinity 无限大
	 	console.log(typeof b);  //number类型

	 	// 2.string

	 	/*
	 	var a = 'alex'; // 单引号 和双引号 都可以表示字符串
	 	console.log(typeof a);//string类型

	 	var b = '';
	 	console.log(b); 输出空值不报错
	 	console.log(typeof b); 输出string
	 	特殊情况:
	 	+ 可能是连字符 也可以是数字的加号

	 	// 字符串 + 数值 相当于字符串的拼接 输出:我哎1
	 	console.log('我'+'哎'+1);

	 	// 数字和数字相加 是加号 表示运算
	 	console.log(1+2+3);
	 	区别:
	 	console.log(‘1+2+3’)

	 	// 小技巧  将数值类型转换成字符串类型
	 	var c = 10+'';
	 	console.log(typeof c) 输出:string;
	 	*/
	 	
        // 对字符串 +  是拼接  其他得运算可以 - * /
        var a1='1';
        var a2='2';
        console.log(a1+a2);  // 12 拼接 不是数值
        console.log(typeof(a1+a2)); // string
        console.log(parseInt(a1)+parseInt(a2)); // 3

        console.log(a1*a2); // 2
        console.log(typeof (a1*a2)); //number

        var b1 = 'one';
        var b2 = 'two';
        console.log(b1*b2); // NaN == not a number
        console.log(typeof (b1*b2)) // number



	 	// 3.boolean
	 	var Show=True;
	 	console.log(Show); // 输出:boolean

	 	var isShow  = 1>1;
	 	console.log(typeof isShow);

	 	// 4.null  空对象
	 	var d = null; //空对象 输出:object
	 	console.log(typeof d);

	 	// 5.undefined 未定义的

	 	var  d1;
	 	console.log(d1); //结果是undefined,灰字体
	 	console.log(typeof d1); //undefined 数据类型 黑色字体

运算符

赋值运算符
算数运算符
复合运算符
比较运算符
逻辑运算符 &&(and) || (or)

		var a = 5;
		//  先将a的值赋值给b输出,然后再对a++ a此时是6
		var b = a++;
		// console.log(a); //6
		// console.log(b); //5

		var b = ++a;
		// 先a++ 将a输出 在将输出的值赋值给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 type="text/javascript">
		/*
		// 1.将number类型转换成string类型

		//1>隐式转换(内部自动转换) 小技巧
		var n1 = 123;
		var n2  = '123';
		console.log(n1+n2);


		//2> 强制转换

		// String() toString()
		var  str1 = String(n1);
		console.log(typeof str1); string

		var num  = 2334;
		var numStr = num.toString();
		console.log(typeof numStr);
		*/

		//2.将字符串类型转换成number类型

		var stringNum = '131313';
		var num = Number(stringNum);
		console.log(num); // 131313
		console.log(typeof num); //number


		var stringNum2 = '13.1313fjkafbh13233dkjf';
		var num2 = Number(stringNum2);
		console.log(num2);// NaN (Not a Number)
		console.log(typeof num2);//number

		// parseInt() parseFloat() 解析字符串,并且返回整数和浮点型
		console.log(parseInt(stringNum2));//13
		console.log(parseFloat(stringNum2));//13.1313
	</script>
// 在js中所有得数据类型 都会被转换为boolean类型
        // 0 NaN null undefined 为false 其他得为true
        var b1 = '123';
        var b2 = -123;
        var b3 = Infinity; //无穷大

        var b4 = 0;
        var b5 = NaN;
        var b6; //undefined
        var b7 = null;

        console.log(':',Boolean(b1)) //true
        console.log(Boolean(b2)) // true
        console.log(Boolean(b3)) // true
        console.log(Boolean(b4)) // false
        console.log(Boolean(b5)) // false
        console.log(Boolean(b6)) // false
        console.log(Boolean(b7)) // false

if语句


    		if (条件){条件为真执行此区域代码} 
    		else if(条件){执行}
    		else{不为真则执行}

    		var age = 20;
    		if(age > 18){
    			console.log('可以考驾照');
    		}
    		console.log(22222); //代码照样执行
   

switch语句

一定注意要写break

var gameScore = 'good';

		/*
		if (gameScore  == 'better') {

		}else if(gameScore == 'good'){

		}else if(gameScore == 'best'){

		}else{
			
		}
	switch (gameScore) {
			case 'good':
				console.log('玩的很好');
				// switch语句 case表示一个条件,满足这个条件就会输出,直到遇到break跳出,
				// 如果break不写,那么程序一直运行,会遇到下一个break停止。这个就是‘case穿透’
				break;
			case 'better':
				console.log('玩的老牛逼');
				break;
			case 'best':
				console.log('恭喜你,吃鸡成功');
				break;
			default:
				console.log('很遗憾,被淘汰了');
				break;
		}

while循环

// 1. 初始化循环变量
// 2. 判断循环条件
// 3. 更新循环变量

// 例子: 打印1~10之间的数

// 初始化循环变量
var i = 1;
// 判断循环条件
while (i <= 10) {
	console.log(i);

	// 更新循环变量
	// i = i+1;
	i+=1;
}

do while循环

	// 用途 不大,就是不管条件如何 上来先做一次,  然后再去循环

		var i = 3;
		do{
			console.log(i);
			i+=1;
		}while(i < 10);

for循环

for循环遍历列表 是最常用的对数据的操作

1.初始化 2.循环条件 3.更新循环变量

// 输出1~100之间的数
		for(var i = 1; i <= 100; i ++){
			console.log(i);
		}
		
// 1.输出1~100之间所有数之和
		var sum = 0;
		for(var i = 1; i <= 100; i ++){
			sum = sum + i;
		}
		console.log(sum);

//2. 将1~100所有是2的倍数在控制台打印
		
		for(var i = 1;i <= 100; i++){
			if (i % 2 == 0) {
				console.log(i);
			}
		}

双重for循环

		for(var i = 0; i < 3;i++){ //控制着你的行数
			for(var j = 1;j <=6;j++){ //控制的星星数
				document.write("*");
			}

			document.write('<br>');
		}

        for(var i=1; i<=6;i++){
           for(var j=0;j<i;j++){
               document.write('*');
           }
            document.write('<br>');
        }

        for(var i=1;i<=6;i++){
            for(var s=i;s<=6;s++){
                document.write('&nbsp');
            }

            for(var j=0;j<i;j++){
                document.write('*');
            }

            document.write('<br>')
        }

在这里插入图片描述

复杂数据类型

		Function  函数
		Object   
		Arrary  
		Date     时间模块

Array

两种创建方式

		// Array 

		/*
		// 1.字面量方式  推荐大家使用这种方式 简单粗暴

		var colors = ['red','green','blue'];
		console.log(colors); //第一次打开输出Arry(3),再次刷新输出['red','green','blue'],
		                    //console.log(colors);相当于在console里直接输入window.colors回车。
		                    // 所有的变量 都挂载到了全局对象window,相当于console.log(window.colors);
		                    //console页面浏览器里相当于解释器。
		*/


		// 2.使用构造函数(js中创建对象)的方式来创建

		var colors = new Array();//创建了空数组
		console.log(colors);

		colors[0] = 'red';
		colors[1] = 'green';
		colors[2] = 'blue';
		console.log(colors);

		// for循环 遍历列表
		for(var i = 0; i < colors.length; i++){
			console.log(i,colors[i]);
		}

在这里插入图片描述

常用(7个方法3个补充)

    // 1.数组的合并 concat

    var north = ['北京', '山东', '天津'];
    var south = ['东莞', '深圳', '上海'];

    var newCity = north.concat(south);
    console.log(newCity);//["北京", "山东", "天津", "东莞", "深圳", "上海"]

    // 2.join  将数组中的元素使用指定得字符串连接起来,它会返回一个新的字符串

    var score = [92, 342, 42, 52];
    var str = score.join('|');
    console.log(str);//92|342|42|52

    // 3.slice (start,end) 返回数组的一段记录,相当于切片,顾腚不顾尾

    var arr = ['张三', '李四', '王文', '赵六'];
    var newArr = arr.slice(1, 3);
    console.log(newArr); //["李四", "王文"]

    // 4.push  向数组最后添加一个元素
    arr.push('小马哥');
    console.log(arr); //["张三", "李四","王文","赵六","小马哥"]

    // 5.移除数组元素
    arr.pop();

    // 6.reverse 翻转数组
    var names = ['alex', 'xiaoma', 'tanhuang', 'angle'];
    //.反转数组
    names.reverse();
    console.log(names);// ["angle", "tanhuang", "xiaoma", "alex"]

    // 7 sort 对数组排序 按照26个字母排序
    var names2 = ['alex', 'xiaoma', 'tanhuang', 'abngel'];
    names2.sort();
    console.log(names2); // ["abngel", "alex", "tanhuang", "xiaoma"]


    // isArray() 判断是否为数组  返回为ture|false
    var a = 2;
    var iArray = Array.isArray(a);

    if (iArray) {
    	console.log('是数组');
    }else{
    	console.log('不是数组')
    }

    // 补充:
    // forEach(fn)==回调函数  匿名函数  通过forEach遍历数组的每一项内容  回调函数中的参数 第一个参数为item (每一项内容) 第二个参数 是数组的索引
    names2.forEach(
        function(item,index){
    	console.log(item);
    	console.log(index);
    }
    );
        var sc = [98,97,66,100];

        //toString() 直接转换为字符串 每个元素使用逗号隔开
        var st = sc.toString();
        console.log(st);//98,97,66,100

        // 对“hello world”进行翻转处理 要求变为:"dlorw olleh"
    // 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

        var words='hello world';
        var newwords = words.split("").reverse().join("");
        console.log(newwords);//dlrow olleh

清空数组的方式:

var array = [1,2,3,4,5,6];
    array.splice(0);      //方式1:删除数组中所有项目
    array.length = 0;     //方式2:length属性可以赋值,在其它语言中length是只读
    array = [];           //方式3:推荐

补充 字符串方法

    // 字符串创建
    // var str  = '';
    /*
    var str = newString();
    str[0]  = 'a';
    console.log(str);
    */


    // 1.charAt() 返回指定索引位置的字符
    var str = 'alex';
    var charset = str.charAt(1);
    console.log(charset); //l

    // 2.concat() 返回字符串值,表示两个或者多个字符串拼接
    var str1 = 'al';
    var str2 = 'ex';
    console.log(str1.concat(str2, '|', str1, str2)); //alex|alex


    // 3.replace(a,b) 将字符串b替换成了字符串a
    var a = '1234567755';
    var newStr = a.replace("4567", "****");
    console.log(newStr); //123****755

    // 4.indexof() 查找字符的下标,如果找到返回字符串的下标,找不到则返回-1 
    var str = 'alex';
    console.log(str.indexOf('e')); //2
    console.log(str.indexOf('p')); //-1

    // 5.slice(start,end) 左闭右开 分割字符串 切分

    var str2 = '小马哥';
    console.log(str2.slice(1, 2)); //马

    var str4 = '我的天呢,a是嘛,你在说什么呢?a哈哈哈';
    console.log(str4.substr(0, 4)); //我的天呢

    // 6.split('a',1) 以字符串a分割字符串,并返回新的数组。如果第二个参数没写,表示返回整个数组
    var str3 = '我的天呢,a是嘛,你在说什么呢?a哈哈哈';
    console.log(str3.split('a', 3)); //["我的天呢,", "是嘛,你在说什么呢?", "哈哈哈"]



    //特殊:
	var num = 132.32572;
	//四舍五入
	var newNum = num.toFixed(3);
	console.log(newNum);//132.326

    // trim() 清除 字符串的前后空格
	var str10 = '                 alex                   ';
	console.log(str10.trim());

Math用法

		// 1.向上取整   Math.ceil()

		 var x = 1.2334;
		 var a = Math.ceil(x);
		 console.log(a);//2

		 // 2.向下取整  Math.floor()
		 console.log(Math.floor(x));//1

		 // 3.求两个数的最大值和最小值
		 console.log(Math.max(2,5));
		 console.log(Math.min(2,5));

		 // 4.求随机数 Math.random()  在[0,1) 之间
		 console.log(Math.random());

		 // 200~ 500   求min~max之间的随机数  min + Math.random()*(max-min);
		 console.log(200+Math.random()*(500-200));

函数

两种写法

	// 1.普通函数(常用)
	
	function add(x,y){
		return x + y;
	}
	alert(add(1,2));//可以在任意地方调用

	

	// 2.函数对象 将匿名函数赋值给add
	var add = function(x,y){
		return x + y;
	};

	console.log(typeof add);//function
	console.log(add(1,2));

伪数组argument

		// arguments  伪数组,获取实参,只在函数中使用,
		// 它有数组的索引 ,length 属性 但是它没有数组的方法
        add('xiaoming','xiaohong');

        //没有形参
		function  add() {
            console.log(arguments);// ["xiaoming", "xiaohong", callee: ƒ, Symbol(Symbol.iterator): ƒ]
            //遍历实参
			for(var i =0; i < arguments.length; i ++){
				console.log(arguments[i]);
			}
		}

Object对象

四种创建方式的演化

            // 1.使用Object或对象字面量创建对象,
            //最基本创建对象的方式,
            //常用,缺点是需要一个一个创建

            var person =  new Object();

            // 给对象赋值
            person.name = 'xiaoming';
            person.age = 20;

            person.func=function(){
                    alert(this.name);
            };


            var person2 = {
            	name:'xiaoming',
            	age:26,
            	fav:function(){

            	// this 指的是当前的对象 跟python中的self类似
            	console.log(this.name);
           	 }
            };

            console.log(person2);//{name: "xiaoming", age: 26, fav: ƒ}
            person2.fav();//xiaoming

    // 2.工厂模式创建对象,
    //将字面量对象创建过程封装起来以便于重复调用。
    //只不过创建的都是Object类型,无法区分人还是水果

    function createPerson(name, age) {
        var o = new Object();
        o.name = name;
        o.age = age;

        return o;
    }

    var person1 = createPerson('xiaoming', 20);


    // instanceof 检测类型
    console.log(person1 instanceof Object);//True 

    function createFruit(name,color) {
        var o = new Object();
        o.color = color;
        o.name=name;

        return o;
    }

    var f = createFruit('苹果','red');
    console.log(f instanceof Object);//True 


//3、构造函数模式创建对象,可以区分类型
//对于任意函数,使用new操作符调用,那么它就是构造函数;
//不使用new操作符调用,那么它就是普通函数。
//约定构造函数名以大写字母开头,普通函数以小写字母开头

function Student(name, age) {
  this.name = name;
  this.age = age;
  this.alertName = function(){
    alert(this.name)
  };
}

function Fruit(name, color) {
  this.name = name;
  this.color = color;
  this.alertName = function(){
    alert(this.name)
  };
}

//再分别创建Student和Fruit的对象:

var v1 = new Student("easy", 20);
var v2 = new Fruit("apple", "green");

//用instanceof操作符来检测以上对象类型

alert(v1 instanceof Student);  //true
alert(v2 instanceof Student);  //false

alert(v1 instanceof Fruit);  //false
alert(v2 instanceof Fruit);  //true

alert(v1 instanceof Object);  //true 任何对象均继承自Object
alert(v2 instanceof Object);  //true 

4.原型的模式创建对象
//把构造函数的对象的方法提取出来添加到父类,常用。
function Student() {
    this.name = 'easy';
    this.age = 20;
}


Student.prototype.alertName = function(){
    alert(this.name);//this 指的是Student
};

var stu1 = new Student();
var stu2 = new Student();

stu1.alertName();  //easy
stu2.alertName();  //easy

alert(stu1.alertName == stu2.alertName);  //true 二者共享同一函数

Date

		var myDate = new Date();
		console.log(myDate);
		//Wed Feb 13 2019 15:57:11 GMT+0800 (中国标准时间)

		// 获取本地时间  月份中第几天(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())
        //2019/2/13 下午3:57:11

补充 JSON

// 在数据传输过程中,JSON通常是以字符串的形式传递,
//但是js更喜欢操作JSON对象,所以Jjson对象和json字符串转换非常重要
JSON字符串:
var jsonStr ='{"name":"alex", "password":"123"}' ;
JSON对象:
var jsonObj = {"name":"alex", "password":"123"};

JSON字符串转换JSON对象
var jsonObject= jQuery.parseJSON(jsonstr);

JSON对象转化JSON字符串
var jsonstr =JSON.stringify(jsonObject );

		// 3.遍历JSON对象和JSON数组
		// (1)遍历JSON对象

		var packJSON = {"name":"alex","pwd":123};

		// for  in
		for(var k in packJSON){
			// k指的是键值的索引
			console.log(k+' '+packJSON[k])
		}
		
		// (2) 遍历JSON数组
		var packJSON = [{"name":"alex","pwd":123},{"name":"wusir","pwd":123}];

		for(var i in packJSON){
			console.log(i+'  ' + packJSON[i].name + ' ' + packJSON[i].pwd );

		}

猜你喜欢

转载自blog.csdn.net/Light__1024/article/details/87820855