JavaScript知识盲区整理

Posted 大忽悠爱忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript知识盲区整理相关的知识,希望对你有一定的参考价值。

javascript知识盲区整理


script标签用于引入外部js的注意点

  • 当script标签用于引入外部js文件时,就不能在标签体内部编写代码了,即使编写了浏览器也不会执行。
  • 推荐使用引入外部js的方式来编写js代码
<script type="text/javascript" src="temp.js"></script>


JS中严格区分大小写,并且每条语句结尾的分号如果不加,浏览器会自动加,这样会销毁浏览器资源,还容易把分号加错位置


在字符串中我们可以使用\\作为转义字符

/* 
 在字符串中我们可以使用\\作为转义字符
  当表示一些特殊符号时可以使用\\进行转义
  \\" 表示 "
  \\n 表示换行
  \\t 表示制表符
  \\\\ 表示\\
 */
var str="你好\\"大忽悠\\"";

typeof 用来检查变量类型

var a=123;
var b="大忽悠";
alert(typeof a);
alert(typeof b);



Number.MAX_VALUE 和 Number.MIN_VALUE获取最大值和最小值,如果自己写的超过最值范围,会返回Infinity

alert(Number.MAX_VALUE);
alert(Number.MIN_VALUE);

当声明一个变量但是不给其赋值时,会返回一个undefined


强制类型转换


js的强制类型转换


document.write(): 向Body标签体中写入数据


任何值和字符串相加都会变成字符串


本质是调用String()函数


任何值做- * /运算时都会自动转换为Number类型


在任何数据类型前使用+和-都可以隐式将其转换为Number类型

例如: 1 + +“2” +3=6

1+ “2”+3=“123”


在网页中使用Unicode编码

&#编码; ==>这里的编码需要的是10进制,unicode是十六进制


JS对象

		//创建对象
      var obj=new dhy();
	  //增加属性
	  obj.name="大忽悠";
	  obj.age=18;
	  // 修改对象的属性
	  obj.name="小朋友";
	  //删除对象属性
	  delete obj.name;

使用[]方式来设置属性名

      var obj=new dhy();
     obj["name"]="大忽悠";
	 var chose="name";
	 alert(obj[chose]);

JS对象的属性值可以是任意的数据类型

in运算符—检查对象中是否含有指定属性

JS中的对象是引用数据类型,保存在堆上,而基本数据类型存储在栈上



使用对象字面量{}来创建对象


{}和new的方式,本质上是一样的


使用对象字面量创建对象的时候可以同时指定对象的属性



var obj={
	name:"大忽悠",
	age:18,
	"hobby":健身,//属性名可以加"",也可以不加
	test: {name:123} //属性值是一个对象
};

JS函数–函数也是一个对象

		<script type="text/javascript">
       //创建一个函数对象
	   //将需要封装的代码以字符串的形式传递给构造函数
	   var func=new Function("alert(typeof func);");
	   //封装到函数中的代码不会立刻执行,函数中的代码会在函数调用的时候执行
	   //调用语法:函数对象()
	   func();
       //查看func的类型
	   alert(typeof func);
		</script>


使用函数声明来创建一个函数对象

  function f1(){
	  alert("大忽悠");
  }
  //调用函数
  f1();

使用函数表达式来创建一个函数

  var f1=function (){
	  alert("大忽悠");
  }
  //调用匿名函数
f1();

创建一个匿名函数,将这个匿名函数对象赋值给一个变量


函数形参相关注意点


函数实参可以是一个对象,JS函数也是一个对象,也可以作为函数实参传递


函数返回值可以是任意数据,可以是一个对象===》包括函数对象


立即执行函数


对象的属性值如果是一个方法,那么称这个属性为方法



for…in语句枚举对象中的属性


           var peo={
			   name:"大忽悠",
			   age:18
		   }
		   for( var attr in peo)
		   {
			   document.write(peo[attr]);
		   }

[]才可以传递变量,.不行


作用域

全局作用域

全局对象window,全局作用域中所有变量都是其属性,所有函数都是其方法



var关键字声明的变量会在所有代码执行之前被声明


函数声明提前

       f1();//没得问题
		  //函数声明形式
		   function f1()
		   {
			   
		   }
		   f2();//错误
		   //函数表达式形式,即匿名函数
		   var f2=function ()
		   {
			   
		   }

函数作用域


在函数中,不使用var声明的变量会变成全局变量

      d=100;
	alert(d);


this


window是一个全局对象,其实就是相当于那个对象调用这个函数,那么这个函数里面的隐式参数this就是当前调用这个函数的对象


使用工厂方法创建对象

        var CreatePeo=function(name,age){
			var obj={
				name:name,
				age:age
			};
			return obj;
		};
		var p1=CreatePeo("大忽悠1",18);
		var p2=CreatePeo("大忽悠2",19);
		var p3=CreatePeo("大忽悠3",20);

构造函数

function People()
{
  name="大忽悠";//全局变量name
  this.name="大忽悠";//当前新建对象的属性name
}
var people=new People();

可以使用instanceof检查一个对象是否是一个类的实例


this的三种情况


原型对象

对于通过构造函数创建的对象而言,每一次创建,里面的所有变量和对象(函数对象)都会重新创建一遍,那么这样会很浪费空间

通过将该类构造方法下创建的所有对象的公共的属性和方法,统一添加到原型对象中,完成对资源的节约

function People()
{
  this.name="大忽悠";
}
//设置原型对象的属性
People.prototype.age=18;
var p=new People();
alert(p.age);



tostring—类似java,可以重写

如果只重写当前对象的tostring方法,那么只对当前对象起效

如果修改当前原型的tostring,那么对当前构造函数创建的对象都有效


垃圾回收


数组(Array)----数组也是一个对象


使用typeof检查一个数组,会返回object


       //创建数组对象
		 var arr=new Array();
		 //向数组中添加元素
		 arr[0]=123;
		 //获取数组中的元素
		 alert(arr[0]);
		 //获取数组长度
		 var len=arr.length;



字面量[]创建数组时可以同时指定元素

构造函数创建数组时也可以指定元素



数组里面的元素可以是任意数据类型



数组对象的foreach方法—需要一个函数作为参数


slice和splice方法





第三个参数开始的新元素,用来替换删除掉的元素


concat方法


join方法


reverse方法


sort方法




函数对象的call和apply方法----执行函数,修改函数执行时的this指向的对象


this的四种情况


arguments,即使不定义形参,也可以通过arguments获取到形参


包装类----解析器临时转换作用


正则表达式



字面量创建正则表达式


JS教程

教程

以上是关于JavaScript知识盲区整理的主要内容,如果未能解决你的问题,请参考以下文章

项目开发知识盲区整理2

Mysql知识盲区整理

项目知识盲区整理4

服务器知识盲区整理

Linux知识盲区整理

promise知识盲区整理