沸点知识汇总

了解基本数据类型:类型检查、类型转换、不同类型间运算结果


JS基本数据类型和引用数据类型的区别及深浅拷贝

1、基本类型:Number Boolean String Undefined(未定义类型) Null (存放在栈内存中)

2、类型转换

  • 基本数据类型转换成数值类型
  • 基本数据类型转换成字符串类型
  • 基本数据类型转换成转换成布尔类型

JavaScript中基本数据类型之间的转换

例子:

// null转换为0; undefined转换为NaN(NaN其本质是一个number)
5 + null    // 返回 5         因为 null 被转换为 0

// 空字符串转换成数值时,为0
// 字符串中既包含数字还包含字母,例如 ”abc123”,那么转换之后就是NaN
'abc123'   // 返回NaN

// 通过 变量/常量 + ""/’’ 来转换为字符串,底层的本质其实就是调用String()函数
// 将null空类型通过String()的方式转换为字符串类型,转换之后还是null
// 将undefined未定义类型通过String()的方式转换为字符串类型,转换之后还是undefined
"5" + null  // 返回 "5null"   因为 null 被转换为  "null"
"5" + 2     // 返回 52        因为 2 被转换为 "2"

// 通过+/-都将其它类型转换为数值类型
"5" - 2     // 返回 3         因为 "5" 被转换为 5
"5" * "2"   // 返回 10        因为 "5" 和 "2" 被转换为 5 和 2

// 空字符串/0/NaN/undefined/null 转换成布尔类型时,会转换成false, 其它的都是true

== :先转换类型,再比较

=== :全等于,不转换类型直接比较

3、类型检查

typeofinstanceofconstructorObject.prototype.toString.call()

// typeof对引用数据类型不起作用;对基本数据类型null输出的是object
console.log(typeof []); // object
console.log(typeof {
    
    }); // object
console.log(typeof null); // object
console.log(typeof function(){
    
    }); // function

// instanceof对引用数据类型有用,对于基本数据类型,需要先new对象

// Object.prototype.toString.call()能完全判断基本数据类型和引用数据类型
console.log(Object.prototype.toString.call(null)); // [object Null]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]
console.log(Object.prototype.toString.call([])); // [object Array]

js检测数据类型四种方法

了解引用类型:类型检查、不同类型间运算结果


引用类型:Object Function (存放在堆内存中)(Arry也是属于object对象)

数组的基本操作:获取数组项数、栈方法、队列方法、排序方法、遍历方法、判断变量为数组的方法、伪数组、数组扁平化、数组去重、数组乱序


1、栈方法 ------ 提供push()和pop()方法,实现类似栈的行为

push()向数组末尾添加项,返回修改后数组长度。pop()从数组末尾移除最后一项,减少数组长度,返回移除的项。

2、队列方法 ------ 提供push()和shift()方法,实现类似队列的行为

shift()移除数组中的第一个项并返回该项,同时将数组长度减1。

【补充】unshift()方法,它能在数组前端添加任意个项,并返回新数组的长度。

3、排序

  • 默认地,sort() 函数根据字符串Unicode码进行排序
  • 比较函数实现数值排序:nums.sort((a,b) = > a-b); // 升序

4、遍历

  • for循环
  • for in(不仅可以遍历数组,还可以遍历对象)
  • for of
  • forEach(遍历数组,不能break 或者return)
  • 其他方法:Map,Reduce,Filter,Every,some方法都是面向数组的,不是普通对象
  • JavaScript中数组中遍历的方法

5、判断变量为数组的方法

1)instanceof

var arr=[];  
console.log(arr instanceof Array); //返回true 

2)constructor

console.log([].constructor == Array);  // 返回true

3)Object.prototype.toString.call(arr) === “[object Array]”

function isArray(o) {
    
      
    return Object.prototype.toString.call(o) === '[object Array]';  
} 

console.log(isArray([]));  // 返回true

// 或者直接这样:
console.log(Object.prototype.toString.call([]) === '[object Array]') // 返回true

4)Array.isArray()

console.log(Array.isArray([]) )// 返回true

6、伪数组

arguments对象:

arguments对象是所有(非箭头)函数中都可用的局部变量,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。

当实参的个数比形参的个数多的时候,则可以通过arguments来访问实参。

arguments对象不是一个 Array(伪数组),除了length属性和索引元素之外没有任何Array属性。

arguments.length为函数实参个数,arguments.callee引用函数自身。

但是它可以被转换为一个真正的Array:

// 方法一:
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// 方法二:
const args = Array.from(arguments);

// 方法三:
const args = [...arguments];

伪数组:

伪数组就是类似数组的对象,例如:

    obj={
    
    
        "0":"zhang",
        "1":18,
        length:2
    }
    // 这个就是伪数组,含有length属性

主要有以下两类:

1)典型的是函数的 argument参数

2)像调用getElementsByTagName,document.childNodes之类的,它们都返回 NodeList对象都属于伪数组

7、数组扁平化(flatten)

扁平化就是将嵌套的数组变成一维数组的过程。

参考博客:JS 扁平化(flatten) 数组JavaScript 专题之数组扁平化

8、数组去重

利用set对象。

9、数组乱序

方法:sort和Math.random()结合、Fisher-Yates

参考博客:javaScript如何实现真正的数组乱序?「前端进阶」数组乱序

字符串方法


1)length

2)str[]、charAt()、charCodeAt()

3)indexOf()、lastIndexOf()

4)search(),一般与正则表达式配合使用

5)slice()、substring()、substr()

6)replace()、concat()

7)toUpperCase()、toLowerCase()

8)trim()删除字符串两端的空白符

9)split()将字符串转换成数组,可接受正则匹配

闭包


作用域(全局变量和局部变量)

函数内部的变量声明,若没有使用关键字var,则该变量被当做全局变量使用。

函数内部的变量可以读取全局变量;函数外部的变量不能读取函数内的局部变量,怎么解决这个呢,那就使用闭包

闭包:

  • 能读取其他函数内部变量的函数,也可以说是定义在函数内部的函数(子函数)。

匿名函数(没有函数名的函数)的两种定义方式:

  • var double = function(x){return x+x;}
  • (function(x,y){alert(x+y)})(2,3) 第一个括号创建匿名函数,第二个括号传入参数调用该函数

闭包的用途:

  • 读取函数内部的变量
  • 让这些变量的值始终保存在内存中

参考博客:学习Javascript闭包JavaScript中的匿名函数及函数的闭包

DOM


事件


事件处理、事件冒泡、事件捕获、事件委托、浏览器事件机制(DOM事件流,即捕获、目标、冒泡)

事件绑定方式(也叫做事件监听方式,如onclick类型的传统事件绑定方式、HTML触发、addEventListener())

事件循环与消息队列

参考博客:JavaScript事件处理JavaScript事件处理机制原生js——事件监听方法JavaScript 事件循环机制
JS事件模型

变量提升和函数提升(预编译)


函数提升和函数表达式(分为匿名函数表达式和具名函数表达式)

JavaScript中的函数是一等公民,函数声明的优先级最高,它永远被提升至作用域最顶部,然后才是函数表达式和变量按顺序执行。

例子:

var foo = 3;

function hoistFunction() {
    
    
    console.log(foo); // 此处会打印函数 function foo() {}

    foo = 5;
    
    console.log(foo); // 5

    function foo() {
    
    }
}

hoistFunction();
console.log(foo);     // 3

预编译之后:

// 预编译之后

var foo = 3;

function hoistFunction() {
    
    
   var foo;

   foo = function foo() {
    
    };

   console.log(foo); // function foo() {}
   
   foo = 5;

   console.log(foo); // 5
}

hoistFunction();
console.log(foo);    // 3

JavaScript: 变量提升和函数提升

get和post方法如何传输数据,node.js中使用什么属性接收参数


1、GET参数通过URL传递,POST放在Request body中;

2、使用中间件body-parser 获取post数据;

3、req.query解析get请求中的参数,req.body解析post请求中的数据,req.params包含路由参数(在URL的路径部分),而req.query包含URL的查询参数(在URL的?后的参数)。

猜你喜欢

转载自blog.csdn.net/weixin_43973415/article/details/108694939