JS(简介、变量、类型转化、运算符、对象、函数、构造函数、作用域、this、原型对象)

一:JS基本知识

1.1Js的起源:

​		以前比如说要注册一个账户,输一个密码。不管密码格式对不对都要访问后台服务器,时间太长,
	产生的js,不用访问服务器,自己就可已对其作出判断。现在 虽然访问服务器速度很快,js也没有被抛弃,
	现在用js的主要作用在于制作动态效果

​    	Js是按顺序执行,前面没执行结束不会执行后面的,而且不需要进行编译
<script>
	//警告框中提示
        alert("哥,你真帅!!!");
     //页面上提示
        document.write("欢迎来到第一个js");
     //在控制台提示
        console.log("我在控制台");
 </script>

1.2编写的位置:

1 在html或者css标签的onclick属性 或者 超链接a标签的href属性 上编写

2 在<script></script>标签里面写

3 在.js文件中写,在<script></script>标签的scr属性指向该文件路径

 	(注意:一个<script></script>标签 要么在里面实现js代码,要么引入外部文件 )

 	(当一个<script></script>标签即引入了外部文件也在里面实现代码,里面代码无效不会显示效果)

1.3注释:和css的注释一样 /* */ 或者//

1.4的基本语法及变量:

​	js中严格区分大小写

​	js中每一条语句以分号结尾(不加分号浏览器自动加,消耗资源但是有一些时候浏览器会加错位置)

​	js不会进行编译,会按顺序进行执行



​	字面量: 一些不可变得值 1 2 3
​	变量: 利用var关键字声明一个变量 var x;

1.5标识符:

​			自己定义的变量,函数等(不能以数字开头,尽量采用驼峰命名法,尽量不要用中文)

1.6数据类型:

​		js中一共有6种数据类型

​			    String 支付串    Number 数值     Boolean 布尔值     Null 空     Undefined 未定义      Object 对象 

​		为js是弱类型在声明变量的时候,var进行声明,自动识别类型;

​		可以利用typeof x 的返回值查看其x变量的类型

​			注意:	
​				x为Nullber类型的时候,并且超出其最大/最小范围的时候typeof会显示Infinity(正无穷)/-Infinity(负无穷)
​				typeof  NaN得返回number,是一个非法数字
​				进行整数运算比较精确,小数运算不精确,需要进行高精度的运算还是放到后台服务器

1.7类型转换:

​			转为字符串: x.toString(); 或者 var a = String(x);

​			转为Number: x.parseInt();或者 x.parseFloat();或者var a = Number(x);  

​					(true转为1)(null转为0)(ndefined转为NaN)

​			转为Boolean: var a = Boolean(x);

​				(非0为true,0为false)(NaN为false)(非空串都为true)(对象为true)(null,undefined为false)

1.8运算符:

​			任何类型的变量进行+-*/运算的时候,都会自动转换为Number类型

​			任何类型的变量进行&& || 运算,都会自动转为Boolwan类型

​							&&运算 : 如果俩都为true,返回后面的 var x = 5 && “123”则x=”123”

 											 如果有为false的,返回第一个为false的值 var x =NaN && 0;则x=NaN

​							||运算  : 如果第一个为true,则返回第二个值   var x =5|| NaN; 则x=NaN

  	 									 如果第一个值为false,返回第一个值  var x = 0 || “123”则x=”123”

​		任何类型的变量进行***\*与一个数进行\****>  <  >=  <=  运算,都会自动转为Number类型

​		(string与string比较是字典序比较每一个的字符编码)(任何数与NaN比较都是false)



​	当字符串进行拼接的时候,var x = 1++”2“+3;则x会为6,因为+“2”自动换为Number类型

​            var x = 1+”2”+3;则x会为123,因为这是字符串拼接

​	单目运算符、双目运算符、逻辑运算符、赋值运算符、关系运算符、相等运算符、条件运算符、运算符的优先级和java有些差不多一样


	
	在JS中==和===是有区别的,尽量利用===全等判断两个变量是否相等
    变量 typeof可以判断变量的类型
	变量 Instanceof 类型可以判断变量是否为该类型

1.9 对象

​		对象的分类:    1:内建对象:ES标准中定义的对象,如:Math Number Boolean.....

​					   2:宿主对象:JS的运行环境提供的对象(浏览器提供的对象)BOM DOM

 			 		   3:自定义对象:自己利用Object定义的对象

​		创建一个对象:  var obj = new Object(); 

​					   var obj = { }; 

​					   var obj = {属性名1:属性值 ,属性名2:属性值 ,..........};

​		为对象添加新的属性:  obj.name=”张三”;

​		删除一个对象的属性: delete obj.name;

​		调用: obj.name

​		检查一个对象是否该属性:  “属性” in 对象 (如果对象中没有定义属性,返回对象值为underfined)

​		如果两个变量保存的是同一个对象,当对象变得时候,变量也会受到影响

​				var  obj1 =new Object();

​				obj1.name = “张三”;

​				var  obj1 =obj2;     //此时的obj2.name =“张三”;

​				obj1.name = “李四”;     //此时的obj2.name =“李四”;

​		当new的时候就会创建一个对象,调用其构造函数

在这里插入图片描述

1.10函数:

​	js中函数也是一个对象,是Function的对象,具有普通对象的一切

​		创建一个函数对象:

​			  var  fun = new Function(字符串形式传入该函数的实现代码); (这种方式不好)\****

​	 		  function 函数名(形参1,形参2.....形参n){  实现语句 }

​			  var  fun = function(形参1,形参2.....形参n){  实现语句 }

​				 (当要传的值为对象的时候,形参用o代替)

​	在js函数里面加上return就在该处结束函数并有返回值,还不用声明返回值类型

​	调用函数: 函数名(实参列表);

	一定区分 var x = fun; 和 var x = fun();

​			当调用对象的时候,不加后面大括号实参列表,调用的为该函数对象(函数的代码实现)

1.11作用域:

​	JS中有两种作用域:

1. 全局作用域:

	     直接写在script标签中的JS代码,有全局作用域
   ​		在网页打开的时候创建,网页关闭的时候销毁
   ​			(在一个script表现可以访问另一个script标签中的全局变量)

   ​	    在全局作用域有一个***\*全局对象window\****
    ​		(window代表一个浏览器的窗口,我们可以直接使用)

 	  ​	创建的变量都是window 的对象的属性: a和window.a没区别
  	 ​	创建的函数都是window 的对象的方法:fun()和window.fun()无区别

2. #### 函数作用域:

   ​	函数中可以访问全局变量,但函数自己内部的变量不可以被其他访问

   (函数里面的var变量还在函数调用的时候声明,在处理到该行函数赋值)

1.12 this:

​		this指向当前调用的对象

​			常见的有三种方式:

​				1: 调用函数fun()的时候,this为window

​				2:调用成员函数的时候,this为该对象

​				3:构造函数的时候,this为新创建的对象

在这里插入图片描述

1.13使用工厂的方式 创建对象:

​	通过一个普通的函数,直接利用他的返回值

​		  创建好的x1和x2,还可以后续再加特有的属性和函数

    重写对象的toString方法:

​				当直接输出该对象的时候,默认的是调用其tostring方法

在这里插入图片描述

1.14构造函数:

​	构造函数***\*一定是使用new来调用构造函数\****

​		当使用new来调用构造函数的时候,此时的
​		this指向新创建的对象

在这里插入图片描述

1.15原形对象:prototype

	我们创建的每一个函数,解析器都会往函数中添加一个属性: prototype对象
     默认的是prototype对象什么都没有(每一个函数的prototype对象不相同)
	

	普通函数的prototype没有任何的意义,只有构造函数的prototype对象有意义:
		当多个对象通过同一个构造函数生成时,这些对象都有一个相同的隐藏属性--proto--(该--porto--指向的就是构造函数的prototype对象)
		当访问某个对象的属性的时候,会先在对象的身中早该属性,如果没有通过--proto--属性找到构造函数的prototype对象,在这里面找是否有该属性

在这里插入图片描述

	所以我们可以通过向构造方法的  prototype原形对象中添加共有的属性和变量 
	
	列: 往MyClass构造函数中的原形对象中添加值:
			MyClass.prototype.a = 123;

在这里插入图片描述

	访问x2中的a的时候,会先访问他的本身的a即456
	引用x2.__porto__.a是访问的构造函数中的	a即123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小镇男孩~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值