慢慢了解的JS基础知识

222 阅读5分钟

在学校了解到的js知识相对来说还是比较有限的,不过js这个网络脚本语言还是很重要的,在网上看到了一些经常看到的也比较简单的js基础知识,写下文章记录下来。

1. JS的数据类型

简单数据类型(基础数据类型):string(字符串)、number(数字)、boolean(布尔)、undefined、null、symbol(es6新增)

复杂数据类型:object,object本质上是由一组无序的键值对组成的。object(对象)。

谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。
所以这么算下来,是8种嗷!

2. null和undefined的区别?

null表示没有对象,即该处不应该有值,常用来描述空值,转为数值时为0。

undefined表示缺少值,即此处应该有值,但没有定义。在使用var声明变量但未对其加以初始化时,这个变量的值是undefined,转为数值时为NaN。

console.log(null==undefined);    //true  因为两者都默认转换成了false
console.log(typeof undefined);    //"undefined"  
console.log(typeof null);       //"object"  
console.log(null===undefined);    //false   "==="表示绝对相等,null和undefined类型是不一样的,所以输出“false”

3. 判断JS类型的方式

  • typeof: 这个方法很常见,一般用来判断基本数据类型,如:string,number,boolean,symbol,bigint(es10新增一种基本数据类型bigint,详细介绍),undefined等。 typeof 目前能返回string,number,boolean,symbol,bigint,undefined,object,function这八种判断类型。
   typeof '123'     //  string
   typeof 1        //  number
   typeof true     //  boolean
   typeof Symbol('1')   // symbol
   typeof 111n    //  bigint
   typeof undefined        // undefined
   typeof null     // object
   typeof {a:1,b:2}    // object
   function c(){console.log('123')}
   typeof c     //  function
  • instanceof: 主要的作用就是判断一个实例是否属于某种类型。判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。
   /s/g instanceof RegExp 
   // true
   new Date('2019/01/05') instanceof Date
   // true
   [1,2,3] instanceof Array
   // true
  • constructor: 当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用。

  • toString: toString是Object原型对象上的一个方法,该方法默认返回其调用者的具体类型,更严格的讲,是 toString运行时this指向的对象类型, 返回的类型格式为[object,xxx],xxx是具体的数据类型。

   Object.prototype.toString.call('') ;   // [object String]
   Object.prototype.toString.call(1) ;    // [object Number]
   Object.prototype.toString.call(true) ; // [object Boolean]
   Object.prototype.toString.call(undefined) ; // [object Undefined]
   Object.prototype.toString.call(null) ; // [object Null]
   Object.prototype.toString.call(new Function()) ; // [object Function]
   Object.prototype.toString.call(new Date()) ; // [object Date]
   Object.prototype.toString.call([]) ; // [object Array]
   Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
   Object.prototype.toString.call(new Error()) ; // [object Error]
   Object.prototype.toString.call(document) ; // [object HTMLDocument]
   Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用

4. js中var和let和const的区别?

  • var :(1)var定义的变量在之后可以修改,如果不初始化会输出 undefined,不会报错。
var a;
console.log(a); // undefined
// -----------------------------
console.log(a); // undefined
var a = 1;

(2)var定义的变量,可以跨块访问, 不能跨函数访问。

(3)var只有函数作用域,没有块级作用域。

(4)var的作用域是函数作用域,var可以用来声明全局变量,也可以声明局部变量。在一个函数内利用var声明一个变量,则这个变量只在这个函数内有效。
全局变量:在函数外定义的变量,作用域是整个代码文件。
局部变量:在函数内定义的变量,作用域是当前的函数内部。

(5)可以重复定义,后面的值会覆盖前面的。

如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域。

var a = 1; //此处声明的变量a为全局变量
function foo(){
   var a = 2;//此处声明的变量a为函数foo的局部变量
   console.log(a);//2
}
foo();
console.log(a);//1

如果在声明变量时,省略 var 的话,该变量就会变成全局变量,如全局作用域中存在该变量,就会更新其值。如:

var a = 1; //此处声明的变量a为全局变量
function foo(){
   a = 2;//此处的变量a也是全局变量
   console.log(a);//2
}
foo();
console.log(a);//2
  • let :(1)let是块级作用域,函数内部使用let定义后,对函数外部无影响。
let a = 666; 
console.log("函数外let 定义a:" + a); // 函数外let 定义a:666

function cg(){
let a = 888;
console.log("函数内let 定义a:" + a);// 函数内let 定义a:888
}

cg();
console.log("函数调用后let 定义a为函数内部修改值:" + a);
// 函数调用后let定义a为函数内部修改值:666

(2)不存在变量声明提前,否则会报错。

console.log(a);
let a = 1;

(3)let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

var c=11;
{
let c=12;
console.log(c);// 12
}
console.log(c);// 11

(4)不能重复定义,否则会报错。

let a = 1;
let a = 2;
console.log(a);
  • const :(1)const定义的变量不可以修改,而且必须初始化。
const b = 2;// 正确
const b; // 错误,必须初始化

(2)const一般用来声明常量,且声明的常量是不允许改变的,为只读属性,因此就要在声明的同时赋值。

(3)const与let一样,都是块级作用域,只能在块作用域里访问,存在暂时性死区,不存在变量声明提前,不允许重复定义。

  • 变量提升 ,意思就是,函数任意地方声明变量都可以,就相当于是在顶部声明了(只是声明了而已,并不是赋值)。var 声明的变量,提升时只声明,不赋值,默认为undefined,let、const不存在提升。

5. js中,== 和 === 的区别?

简单来说: == 代表相同, ===代表严格相同。

==, 两边值类型不同的时候,要先进行类型转换,再比较。
===,不做类型转换,类型不同的一定不等。

6. 睡觉

不要熬夜,熬夜会长胖而且会变丑。