[Javascript】前端面试基础3【每日学习并更新10】

news2024/11/16 14:22:21

Web开发中会话跟踪的方法有那些

  • cookie
  • session
  • url重写
  • 隐藏input
  • ip地址
     

JS基本数据类型

  • String:用于表示文本数据。
  • Number:用于表示数值,包括整数和浮点数。
  • BigInt:用于表示任意精度的整数。
  • Boolean:用于表示逻辑值,即true或false。
  • Undefined:当一个变量被声明了,但没有被赋值时,它的值就是undefined。
  • Null:表示一个空值,即没有对象值被赋予变量。
  • Symbol(ES6引入):用于创建唯一的标识符

Javascript常见数据结构和设计模式-CSDN博客

 JS内置对象

Javascript中Object、Array、String-CSDN博客

  • 0bject是JavaScript中所有对象的父对象
  • 数据封装类对象:0bject . Array . Boolean . Number和 String
  • 其他对象:Function . Arguments .Math、Date 、RegExp 、Error

Javascript基本规范

 Javascript有几种类型的值

  • 栈:原数据类型( Undefined ,Null ,Boolean ,Number .String )
  • 堆:引用数据类型(对象、数组和函数)
  • 两种类型的区别是:存储位置不同;
  1. 原始数据类型直接存储在栈( stack )中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;
  2. 引用数据类型存储在堆( heap )中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体
var person = {  
    firstName: "John",  
    lastName: "Doe",  
    age: 50,  
    greet: function() {  
        console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
    }  
};  
  
person.greet();

 Javascript创建对象的几种方式

1. 对象字面量

var person = {  
    firstName: "John",  
    lastName: "Doe",  
    age: 50,  
    greet: function() {  
        console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
    }  
};  
  
person.greet();

2. 使用new Object()

var person = new Object();  
person.firstName = "John";  
person.lastName = "Doe";  
person.age = 50;  
person.greet = function() {  
    console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
};  
  
person.greet();

3. 构造函数

构造函数是一种特殊的函数,用于初始化新创建的对象。通过new关键字调用构造函数时,会创建一个新对象,并将这个新对象的内部[[Prototype]](即__proto__)链接到构造函数的prototype属性上,最后返回这个新对象。

function Person(firstName, lastName, age) {  
    this.firstName = firstName;  
    this.lastName = lastName;  
    this.age = age;  
    this.greet = function() {  
        console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
    };  
}  
  
var person = new Person("John", "Doe", 50);  
person.greet();

4. 工厂函数

工厂函数是一种封装了创建对象细节的函数,它返回一个对象。这种方法比直接使用new Object()更加灵活。

function createPerson(firstName, lastName, age) {  
    var obj = new Object("I'm an Object");  
    obj.firstName = firstName;  
    obj.lastName = lastName;  
    obj.age = age;  
    obj.greet = function() {  
        console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
    };  
    return obj;  
}  
  
var person = createPerson("John", "Doe", 50);  
person.greet();

5. 原型链

在JavaScript中,每个对象都有一个原型(prototype),对象会继承原型的属性和方法。通过修改构造函数的prototype属性,可以实现多个实例共享同一套方法和属性。

function Person(firstName, lastName, age) {  
    this.firstName = firstName;  
    this.lastName = lastName;  
    this.age = age;  
}  
  
Person.prototype.greet = function() {  
    console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
};  
  
var person1 = new Person("John", "Doe", 50);  
var person2 = new Person("Jane", "Doe", 40);  
  
person1.greet();  
person2.greet();

6. ES6 类

ES6引入了类的概念,使得对象的创建更加直观和易于理解。类语法是基于原型的面向对象编程的语法糖。

class Person {  
    constructor(firstName, lastName, age) {  
        this.firstName = firstName;  
        this.lastName = lastName;  
        this.age = age;  
    }  
  
    greet() {  
        console.log("Hello, my name is " + this.firstName + " " + this.lastName);  
    }  
}  
  
var person = new Person("John", "Doe", 50);  
person.greet();

eval() 

  •  它的功能是把对应的字符串解析成JS 代码并运行
  • 应该避免使用eval ,不安全,非常耗性能(2次,一次解析成js 语句,一次执行)
  • 由JSON字符串转换为JSON对象的时候可以用eval, var obj =eva1(' ( ' + str +')')

 null与undefined

 ["1", "2", "3"].map(parseInt)=[1,NAN,NAN]

 但是,这里有一个需要注意的陷阱。当 map 函数对数组中的每个元素调用 parseInt 时,parseInt 实际上可以接受两个参数:第一个参数是要解析的字符串,第二个参数是基数(即数字的进制)。在 map 函数中,parseInt 被调用时,除了当前元素(即字符串)作为第一个参数外,map 函数还会传递当前元素的索引(从0开始)作为第二个参数给 parseInt

因此,你的代码实际上会这样执行:

  • 第一个元素 "1",索引为0,parseInt("1", 0)由于基数为0,parseInt 会根据字符串的格式来解析,这里 "1" 能被正确解析为十进制数1
  • 第二个元素 "2",索引为1,parseInt("2", 1)这里基数为1,但基数1不是一个有效的基数(有效的基数范围是2到36),因此 parseInt 会返回 NaN(Not-a-Number)。
  • 第三个元素 "3",索引为2,parseInt("3", 2)这里基数为2,但 "3" 在二进制中不是一个有效的数字,因此 parseInt 同样会返回 NaN
["1", "2", "3"].map(function(item) {  
    return parseInt(item, 10); // 或者简单地 parseInt(item)  
});

----------------------------------------------------------------
["1", "2", "3"].map(item => parseInt(item, 10)); // 或者简单地 ["1", "2", "3"].map(parseInt) 如果环境允许默认基数


----------------------------------------------------------------------------
//拓展
let numbers = ["10", "010", "0xA"];
let decimalNumbers = numbers.map(function(item) {  
    // 检查字符串的前缀来确定基数  
    if (item.startsWith("0x") || item.startsWith("0X")) {  
        // 十六进制  
        return parseInt(item, 16);  
    } else if (item.startsWith("0")) {  
        // 假设以0开头但不是"0x"或"0X"的是八进制(注意:现代JavaScript可能默认解析为十进制)  
        // 为了明确性,我们显式指定基数为8  
        return parseInt(item, 8);  
    } else {  
        // 十进制  
        return parseInt(item, 10);  
    }  
});  
  
console.log(decimalNumbers); // 输出: [10, 8, 10]

 javascript代码中的"use strict";是什么意思

在JavaScript代码中,"use strict"; 是一个特殊的指令,用于启用严格模式(strict mode)。当在脚本或函数的顶部包含这个指令时,它告诉JavaScript引擎以更加严格的解释和执行代码的方式来运行代码。这有助于捕获一些常见的编码错误,使得代码更加安全、可预测和易于管理。

严格模式有几个主要的好处和限制:

  1. 捕获更多错误:在严格模式下,JavaScript会抛出更多的错误,从而帮助你更早地发现并修复问题。例如,它会阻止你使用未声明的变量(在未启用严格模式的情况下,这通常会导致全局变量被意外创建)。

  2. 禁用某些不安全或不确定的特性:严格模式会禁用或改变一些JavaScript的“不安全”特性,比如with语句和eval()函数的行为。

  3. 使代码更加可预测:在严格模式下,JavaScript的行为在某些方面更加可预测,比如静默失败的操作(如将值赋给只读属性)会抛出错误。

  4. 提升性能:虽然这不是启用严格模式的主要动机,但一些JavaScript引擎在严格模式下能够执行更多的优化,因为严格模式限制了代码的行为,使得这些优化成为可能。

  5. 更清晰的代码意图:通过在代码顶部使用"use strict";,你可以明确地向其他开发者表明这段代码是以更严格的标准编写的,这有助于维护代码的质量和一致性。

JSON 

 JS延迟加载方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1946571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流量录制与回放:jvm-sandbox-repeater工具详解

在软件开发和测试过程中,流量录制与回放是一个非常重要的环节,它可以帮助开发者验证系统在特定条件下的行为是否符合预期。本文将详细介绍一款强大的流量录制回放工具——jvm-sandbox-repeater,以及如何利用它来提高软件测试的效率和质量。 …

linux进程——解析命令行参数——环境变量详解

前言:本节内容还是linux进程, 主要讲解里面的环境变量——我们首先要知道的就是环境变量其实就是操作系统维护的一组kv值, 环境变量是系统提供的一组 变量名变量值 形式的变量。不同的环境变量之间具有不同的用途, 并且具有全局属…

刷机维修进阶教程-----何谓“tee损坏” 指纹丢失 掉帧 传感器失效?详细修复步骤教程

TEE损坏指的是安卓机型中Key Attestation密钥认证所依赖的可信应用中的证书库被破坏了。然后拒绝为指纹密匙认证提供服务。加密的密匙由TEE负责管理。tee损坏只影响当前机型的密匙认证。不影响加密。通俗的理解。如果你机型维修或者刷机或者解锁或者格机 全檫除分区等等后有异常…

Python自然语言处理库之NLTK与spaCy使用详解

概要 自然语言处理(NLP)是人工智能和数据科学领域的重要分支,致力于让计算机理解、解释和生成人类语言。在Python中,NLTK(Natural Language Toolkit)和spaCy是两个广泛使用的NLP库。本文将详细介绍NLTK和spaCy的特点、功能及其使用方法,并通过具体示例展示如何使用这两…

押金原路退回,手机版一键操作秒到账,无需设备收银设备

传统收银 1.操作不熟练:对收银系统的功能和操作不熟悉,可能导致收银过程较长,顾客等待时间增加。 2无法适应新技术:对于一些新的支付方式或技术,不能自主学 3操作不熟练:鼠标使用不熟练,对收…

element DatePicker 日期选择器,只选择月,月份数据从0开始(0月31日),而不是从1开始,JavaScript的原因,如下为解决办法

<el-date-pickerv-model"queryParam.yuedTime"type"month"placeholder"选择月"change"handleMonthChange"></el-date-picker> 方式一&#xff1a;在前端处理 change"handleMonthChange" &#xff0c;增加此方…

PostgreSQL的学习心得和知识总结(一百四十九)|psql 的使用技巧:设置、预设、回显和已保存的查询

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

nms概念

nms基本概念&#xff1a;非极大值抑制 用途&#xff1a;在做目标检测的时候&#xff0c;往往会生成很多很多候选框&#xff0c;在做目标检测的时候&#xff0c;往往会生成很多很多候选框。 处理流程&#xff1a; 1.对某一类按score对候选框进行排序&#xff0c;并选出score最…

ffmpeg把pcm封装为wav

note 1.wav格式中&#xff0c;音频数据未经过压缩&#xff0c;直接封装即可 2.对于编码器的选择&#xff0c;应选择和pcm裸数据一致的编码器(本次实际不须编码) version #define LIBSWRESAMPLE_VERSION_MAJOR 2 #define LIBSWRESAMPLE_VERSION_MINOR 9 #define LIBSWRESAM…

Python网络爬虫详解:实战豆瓣电影信息采集

文章目录 前言一、爬虫是什么&#xff1f;二、常用库及其作用1.Requests2.BeautifulSoup3. lxml4. Scrapy5. Selenium6. PyQuery7. Pandas8. JSON9. Time 三、实现步骤步骤一&#xff1a;环境准备步骤二&#xff1a;数据采集步骤三&#xff1a;数据处理步骤四&#xff1a;数据存…

【数据分享】2008-2022年我国省市县三级的逐日NO2数据(excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据和2013-2022年的省市县三级的逐日SO2数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次…

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value&#xff0c;然后是Local Preference&#xff0c;再次是路由生成方式&a…

Ansible的脚本-----playbook剧本【上】

目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一&#xff1a;给被管理主机安装httpd服务 2.2 实战演练二&#xff1a;定义、引用变量 2.3 实战演练三&#xff1a;指定远程主机sudo切换用户 2.4 实战演练四&#xff1a;when条件判断 2.5 实战演练五&…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

【C#】visual studio打包winForm(依赖DLL)为安装程序exe

0.简介 IDE&#xff1a;VS2022 平台&#xff1a;C# .NetFramework4.7 WinForm界面 有GDAL、EEplus库的依赖&#xff0c;所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件 在VS扩展中选择管理扩展&#xff0c;Microsoft Visual Studio Installer Projects …

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一&#xff0c;既能在客户端程序中使用&#xff0c;也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目&#xff0c;在Nuget包管理器中搜索并安装Quartz包&#xff0c;如下所…

51单片机嵌入式开发:18、STC89C52RC嵌入式DS1302实时时钟实验及数码管显示

STC89C52RC嵌入式DS1302实时时钟实验及数码管显示 STC89C52RC嵌入式DS1302实时时钟实验及数码管显示1 概述1.1 DS1302简介1.2 DS1302功能和特点1.3 DS1302工作原理1.4 DS1302应用领域 2 DS1302设计原理2.1 引脚说明2.2 寄存器说明及使用&#xff08;1&#xff09;命令cmd字节说…

Redis的缓存问题:缓存穿透、缓存击穿和缓存雪崩

目录 一、缓存穿透 1、问题描述 2、解决方案 二、缓存击穿 1、问题描述 2、解决方案 三、缓存雪崩 1、问题描述 2、解决方案 3、雪崩案例 一、缓存穿透 1、问题描述 缓存穿透指的是⼤量请求的 key根本不存在于缓存中&#xff0c;每次针对此key的请求从缓存获取不到…

报红:找不到名称ref ts(2304)、‘ref‘ is not defined. eslint(no-undef)

接上篇 在上篇介绍了使用 unplugin-auto-import 和 unplugin-vue-components 配置完成后&#xff0c;项目可以正常运行&#xff0c;并且页面也正常显示&#xff0c;但vscode里就是报红 这个报红可能是由于 ts 发出的&#xff0c;也可能是由于 eslint 发出的 具体可以用鼠标…