JavaScript复习整理(一)

JavaScript复习整理(一)

写在前面,这个博客最近在进行一次改动就准备找工作了,储备用完,所以啊,就整理一基础知识,加深印象,对未来的面试也有好处,参考资料是《javscript权威指南第6版》

JavaScript,es6,基本词法语法
1、JavaScript是区分大小写的,HTML是不区分大写的,所以HTML中的标签,属性在js中必须小写。
2、Unicode允许多种方法对同一个字符进行编码。虽然在文本编辑器中显示值是一样的,但是编码是不一样的,在计算机中也是不一样的。

var d='\u00E9',e='e\u0301';
console.log(d);console.log(e);console.log(d==e);

3、js直接量:数字,字符串,数字,对象。
4、js原始类型:数字,字符串,布尔值,null,undefined(null,undefined是无法拥有方法的值,主要原因可能是他们没有属于自己的包装对象,同时null和undefined是其关键字,对null执行typeof返回的是object,null和undefined用==比较返回是true,用===返回是false,同时还要一个重要点,在期望undefined是布尔值时,js会转换成false,但是这不意味着undefined==false)。

console.log(undefined==false);

5、js对象类型:对象。两个特殊对象,Array,函数(若函数用来初始化,使用new运算符,新建一个对象,即为构造函数)
6、js不区分整型和浮点型(在es6中严格模式下,八进制直接量是禁止的)
7、js中被0整除不报错,返回的是Infinity或-Infinity。但是0除以0是返回NaN(NaN有一个特殊的地方,他和任何值都不相等,包括自身,是没有办法用X==NaN来判断变量X是否是NaN,所以应该用X!=Xl来判断X,X若是NaN就是true)。
8、js中字符串等连接通常是使用+。在ES6中是使用模板字面量.。
9、字符串方法
charAt()、substring()、substr()、slice()、indexOf()、lastIndexOf()、split()、replace()、toUpperCase()等 (很重要的一点是js中字符串是固定不变的,所以字符串的方法是无法改变字符串本身的,他只能返回一个新的字符串)。
10、toString()方法可以将Number类转换成用户所需求的字符串类型,可转成2,8,16进制,数字转字符串还要三种方法:toFixied(),toExponential(),toPrecision()。parseInt(),parseFloat(),是转数字。
11、js中常用的类型判断是typeOf,instanceOf。

  • instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上
  • typeof运算符返回number,string,boolean,object,function。无法区分null,object,
    function,Array,等。

为此tostring()方法又有作用了,重写tostring方法即可

var c=Object.prototype.toString.call([1,2,3,4]);console.log(c);

12、js的变量声明,要使用var,否则可能会出现意想不到的bug。同时js中没有块级作用域,只有函数作用域和全局作用域。同时js中var声明的变量会有一个声明提前的机制。

var b="2";       
(function(){                
    console.log(b);   
    var b="1";       
})();   

最后会打印什么?
最后会打印undefined,这是为什么呢?要是对函数作用域链不怎么熟悉并且不知道var的声明提前,认为会拿到b=“2”;似懂非懂的以为会拿到b=“1”;其实都是错误的,正确的是undefined,因为声明提,这个函数相当于是这么写的:

var b="2";       
(function(){ 
    var b;               
    console.log(b);
    b="1";         
})();

因为变量b声明提前能在本函数作用域拿到,所以不会打印“2”。
然后转到es6。es6中新增了2个声明,let和const。

  • let和var基本相同,不同的是let是声明的是真正的块级作用域变量,同时存在临时死区,变量不会被提升。
  • for(var j=0;j<4;j++){
    var d=0;
    d++;
    }
    console.log(j);
    console.log(d);
    //打印的什么?是4和1
  • for(let i=0;i<4;i++) {
    let c=0;
    c=c++;
    console.log(i);
    console.log(c);
    }
    console.log(i);
    console.log(c);
    //这又打印什么?其实里面的能打印出来,但是外面的就会报错i is not defined;这就是块级作用域的作用。
  • const是声明常量,也就是值不变了。在es6中经常用const声明对象,数组,因为他们虽然可以改变,但是实际上const 声明的量指向的引用地址是不变的,也就是相当于常量

猜你喜欢

转载自blog.csdn.net/tangjie109411/article/details/80373124