当前位置: 首页 > news >正文

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

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延迟加载方式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【iOS】——Block循环引用
  • Java面试题基础
  • JAVA(SpringBoot)对接微信登录
  • docker compose build 怎么才能只构建其中一个服务的镜像
  • 基于微信小程序+SpringBoot+Vue的儿童预防接种预约系统(带1w+文档)
  • 夯实数字经济的“新基建”-基于大数据与区块链技术的新型基础设施
  • LangChain4j-RAG基础
  • Linux相关指令
  • Apache DolphinScheduler Worker Task执行原理解析
  • 校车购票小程序的设计
  • Perl脚本学习(一)-- 基础语法
  • 17 敏捷开发—Scrum(2)
  • 微信小程序根据动态权限展示tabbar
  • ChatGPT:@JSONField 有什么用
  • 【LeetCode】字母异位词分组
  • CSS 专业技巧
  • CSS3 变换
  • JavaScript服务器推送技术之 WebSocket
  • laravel5.5 视图共享数据
  • Linux中的硬链接与软链接
  • Material Design
  • miaov-React 最佳入门
  • nfs客户端进程变D,延伸linux的lock
  • node 版本过低
  • uva 10370 Above Average
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 基于webpack 的 vue 多页架构
  • 技术:超级实用的电脑小技巧
  • 前端临床手札——文件上传
  • 数据科学 第 3 章 11 字符串处理
  • 自制字幕遮挡器
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #pragma预处理命令
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (13)Hive调优——动态分区导致的小文件问题
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (论文阅读11/100)Fast R-CNN
  • (一)kafka实战——kafka源码编译启动
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET成年了,然后呢?
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET框架设计—常被忽视的C#设计技巧
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /bin、/sbin、/usr/bin、/usr/sbin
  • [1] 平面(Plane)图形的生成算法
  • [240621] Anthropic 发布了 Claude 3.5 Sonnet AI 助手 | Socket.IO 拒绝服务漏洞
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [AutoSar NVM] 存储架构
  • [bzoj2957]楼房重建
  • [C/C++] C/C++中数字与字符串之间的转换