前端刷题记录_Javascript

本文记录了JavaScript中的核心概念,包括变量、属性与函数、数组与字符串操作、内存回收与闭包、循环遍历及事件绑定。深入探讨了基本数据类型、一元操作符、hasOwnProperty、数组的sort方法、函数的this用法以及事件的执行顺序等知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、变量

1、基本数据类型

String,Number,Boolean,Undefined,Symbol

2、转换规则
数据类型转换为true转换为false
String任何非空字符串" "(空字符串)
Number任何非零数值0和NaN
Object任何对象null
undefinedundefined

null
undefined和null与任何有意义的值比较返回的都是false,
但是null与undefined之间互相比较返回的是true

null == false //false
null == true //false
null == undefined //true
null == 0 //false
null >= 0 //true

变量定义
var a=b=3
相当于 var a = 3;b = 3;a是局部变量,而b是全局变量

3、 一元操作符

+:将值转为number类型

console.log(1+ +"2"+"2");

第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +“2"相当于1+2=3.
然后和后面的字符串“2”相合并,变成了字符串"32”.

+new Array(017) // NaN

二、attr/func

1. hasOwnProperty

: 检测给定的属性是否在当前对象的实例中

2. export & import

export

// Exporting individual features
export let name1, name2,, nameN; // also var, const
export let name1 =, name2 =,, nameN; // also var, const
export function functionName(){...}
export class ClassName {...}

// Export list
export { name1, name2,, nameN };

// Renaming exports
export { variable1 as name1, variable2 as name2,, nameN };

// Exporting destructured assignments with renaming
export const { name1, name2: bar } = o;

// Default exports
export default expression;
export default function () {} // also class, function*
export default function name1() {} // also class, function*
export { name1 as default,};

// Aggregating modules
export * from …; // does not set the default export
export * as name1 from …; // ECMAScript® 2O20
export { name1, name2,, nameN } from …;
export { import1 as name1, import2 as name2,, nameN } from …;
export { default,} from …;

import

import defaultExport from "module-name";
import * as name from "module-name";
import { export1 } from "module-name";
import { export1 as alias1 } from "module-name";
import { export1 , export2 } from "module-name";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export1 [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
var promise = import("module-name");

三、数组

1.会&不会改变数组的方法
//会改变数组的方法:
push()
pop()
shift()
unshift()
splice() //删除或替换现有元素或者原地添加新的元素来修改数组
sort()
reverse()
forEach()
//不会改变数组的方法:
filter()
concat() 
slice() //浅拷贝
map()
2.赋值

a[n]: 数组长度自动延长到n+1,没有赋值的元素均为undefined

3.sort

sort((a, b) => a - b) : 升序 [1, 2, 3, 4, 5]

4.创建 Array 的语法
var arr=[1,2,3];     
var arr=new Array(1,2,3);     
var arr=new Array(12); //如果只有一个数,代表数组的length是12个
var arr=new Array(0); //清空数组

四、字符串

1、数字后面.会被解析为小数点

2.toString() :将会优先将小数点解析为数字小数点
2…toString() :因为连续的两个小数点不符合number的格式规则,第二个小数点才会被解析为调用方法

五、函数

1.全局函数
  • 编码相关:
    escape()、unescape()、encodeURI()、decodeURI()、
    encodeURIComponent()、decodeURIComponent()
  • 数据处理:
    Number()、String()
  • 数字相关:
    isFinite()、isNaN()、parseFloat()、parseInt()
  • 特殊:
    eval()
2. this/箭头函数

普通函数,this永远指向它的调用者;
箭头函数,this指向定义时的上下文

3.原型
  1. 只有实例对象上不存在的属性和方法才会去原型上查找
  2. 构造函数的原型对象的构造器指回构造函数本身
  3. 给构造函数本身添加的方法是静态成员,想要访问静态成员,只能构造函数本身去调用方法,而由构造函数构造出来的实例对象不能直接访问静态成员(属性、方法)
  4. Function & Object
Function.prototype.a = 'a';
Object.prototype.b = 'b';
function Person(){};
var p = new Person();
console.log('p.a: '+ p.a); // p.a: undefined
console.log('p.b: '+ p.b); // p.b: b

Person函数才是Function对象的一个实例,所以通过Person.a可以访问到Function原型里面的属性,但是new Person()返回来的是一个对象,它是Object的一个实例,是没有继承Function的,所以无法访问Function原型里面的属性。
由于在js里面所有对象都是Object的实例,所以,Person函数可以访问到Object原型里面的属性。

六、回收

1.代码回收规则

1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收

2.闭包
for(var i = 0;i<2;i++){
setTimeout(function(){console.log(i)},0) ....}

for(var i = 0;i<2;i++){
(function(i){
setTimeout(function(){console.log(i);},0) ...}(i))
}

①setTimeout是异步的,定时函数被加入执行队列,等(for循环)主程序运行完毕时,此时再调用定时函数,i的值已经变为2,两次的定时函数都会共用i=2这个值,因此打印2个2

②js的作用域是链式的,当for循环函数内部的子块有引用的时候是不会销毁的。这里运用了闭包,外层 function(i)保持着对i的引用,因此每次 i的值得以保留,每次调用定时函数内层function都有自己的私有变量值。 因此打印 0 1
②式中如果把function的参数i去掉,没有对i的引用,结果就和①式一样了

七、循环遍历

1.for in
  1. 遍历的的属性值是字符串,而不是数字!
  2. 遍历的是对象的枚举属性,包括自身属性以及原型链上的属性
    【 不可枚举属性(enumerable: false)不会被遍历 】
  3. 遍历顺序是对象属性的枚举顺序,并不一定按数组的下标顺序遍历

八、事件绑定

1.父子调用顺序

在JS中,绑定的事件默认的执行时间是在冒泡阶段执行,而非在捕获阶段,这也是为什么当父类和子类都绑定了某个事件,会先调用子类绑定的事件,后调用父类的事件
e.preventDefault() :阻止默认事件
e.stopPropagation() :阻止事件冒泡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值