typeof(‘123’) === “string” // true
typeof ‘123’ === “string” // true
2
constructor
‘123’.constructor === String // true
3
Object.prototype.toString.call()
Object.prototype.toString.call(‘123’) === ‘[object String]’ // true
3. 请用 js 去除字符串空格?
参考答案:
replace 正则匹配方法、str. trim()方法、JQ 方法:$. trim(str)方法
解析:
方法一:
replace 正则匹配方法
去除字符串内所有的空格:str = str. replace(/\s*/g, “”);
去除字符串内两头的空格:str = str. replace(/^\s*|\s*$/g, “”);
去除字符串内左侧的空格:str = str. replace(/^\s*/, “”);
去除字符串内右侧的空格:str = str. replace(/(\s*$)/g, “”);
示例:
var str = " 6 6 ";
var str_1 = str.replace(/\s*/g, “”);
console.log(str_1); //66
var str = " 6 6 ";
var str_1 = str.replace(/^\s*|\s*$/g, “”);
console.log(str_1); //6 6//输出左右侧均无空格
var str = " 6 6 ";
var str_1 = str.replace(/^\s*/, “”);
console.log(str_1); //6 6 //输出右侧有空格左侧无空格
var str = " 6 6 ";
var str_1 = str.replace(/(\s*$)/g, “”);
console.log(str_1); // 6 6//输出左侧有空格右侧无空格
方法二:
str. trim()方法
trim()方法是用来删除字符串两端的空白字符并返回,trim 方法并不影响原来的字符串本身,它返回的是一个新的字符串。
缺陷:只能去除字符串两端的空格,不能去除中间的空格
示例:
var str = " 6 6 ";
var str_1 = str.trim();
console.log(str_1); //6 6//输出左右侧均无空格
方法三:
JQ 方法:$. trim(str)方法
$. trim() 函数用于去除字符串两端的空白字符。
注意:$. trim()函数会移除字符串开始和末尾处的所有换行符,空格(包括连续的空格)和制表符。如果这些空白字符在字符串中间时,它们将被保留,不会被移除。
示例:
var str = " 6 6 ";
var str_1 = $.trim(str);
console.log(str_1); //6 6//输出左右侧均无空格
4. js 是一门怎样的语言,它有什么特点
参考答案:
1. 脚本语言。JavaScript 是一种解释型的脚本语言, C、C++等语言先编译后执行, 而 JavaScript 是在程序的运行过程中逐行进行解释。
2. 基于对象。JavaScript 是一种基于对象的脚本语言, 它不仅可以创建对象, 也能使用现有的对象。
3. 简单。JavaScript 语言中采用的是弱类型的变量类型, 对使用的数据类型未做出严格的要求, 是基于 Java 基本语句和控制的脚本语言, 其设计简单紧凑。
4. 动态性。JavaScript 是一种采用事件驱动的脚本语言, 它不需要经过 Web 服务器就可以对用户的输入做出响应。
5. 跨平台性。JavaScript 脚本语言不依赖于操作系统, 仅需要浏览器的支持。
5. == 和 === 的不同
参考答案:
==
是抽象相等运算符,而 ===
是严格相等运算符。 ==
运算符是在进行必要的类型转换后,再比较。 ===
运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回 false
。使用 ==
时,可能发生一些特别的事情,例如:
1 == “1”; // true
1 == [1]; // true
1 == true; // true
0 == “”; // true
0 == “0”; // true
0 == false; // true
如果你对 ==
和 ===
的概念不是特别了解,建议大多数情况下使用 ===
6. 怎样添加、移除、移动、复制、创建和查找节点?
参考答案:
1)创建新节点
-
createDocumentFragment() //创建一个 DOM 片段
-
createElement() //创建一个具体的元素
-
createTextNode() //创建一个文本节点
2)添加、移除、替换、插入
-
appendChild() //添加
-
removeChild() //移除
-
replaceChild() //替换
-
insertBefore() //插入
3)查找
-
getElementsByTagName() //通过标签名称
-
getElementsByName() //通过元素的 Name 属性的值
-
getElementById() //通过元素 Id,唯一性
7. 事件委托是什么
参考答案:
利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!
解析:
1、那什么样的事件可以用事件委托,什么样的事件不可以用呢?
-
适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。
-
值得注意的是,mouseover 和 mouseout 虽然也有事件冒泡,但是处理它们的时候需要特别的注意,因为需要经常计算它们的位置,处理起来不太容易。
-
不适合的就有很多了,举个例子,mousemove,每次都要计算它的位置,非常不好把控,在不如说 focus,blur 之类的,本身就没用冒泡的特性,自然就不用事件委托了。
2、为什么要用事件委托
-
- 提高性能
- 苹果
- 香蕉
- 凤梨
// good
document.querySelector(‘ul’).onclick = (event) => {
let target = event.target
if (target.nodeName === ‘LI’) {
console.log(target.innerHTML)
}
}
// bad
document.querySelectorAll(‘li’).forEach((e) => {
e.onclick = function() {
console.log(this.innerHTML)
}
})
-
- 新添加的元素还会有之前的事件。
3、事件冒泡与事件委托的对比
-
事件冒泡:box 内部无论是什么元素,点击后都会触发 box 的点击事件
-
事件委托:可以对 box 内部的元素进行筛选
4、事件委托怎么取索引?
-
- aaaaaaaa
- 事件委托了 点击当前, 如何获取 这个点击的下标
- cccccccc
window.onload = function() {
var oUl = document.getElementById(“ul”);
var aLi = oUl.getElementsByTagName(“li”);
oUl.onclick = function(ev) {
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if (target.nodeName.toLowerCase() == “li”) {
var that = target;
var index;
for (var i = 0; i < aLi.length; i++)
if (aLi[i] === target) index = i;
if (index >= 0) alert(‘我的下标是第’ + index + ‘个’);
target.style.background = “red”;
}
}
}
拓展:
-
键盘事件:keydown keypress keyup
-
鼠标事件:mousedown mouseup mousemove mouseout mouseover
8. require 与 import 的区别
参考答案:
两者的加载方式不同、规范不同
第一、两者的加载方式不同,require 是在运行时加载,而 import 是在编译时加载
require(’./a’)(); // a 模块是一个函数,立即执行 a 模块函数
var data = require(’./a’). data; // a 模块导出的是一个对象
var a = require(’./a’)[0]; // a 模块导出的是一个数组 ======> 哪都行
import $ from ‘jquery’;
import * as _ from ‘_’;
import {a, b, c} from ‘./a’;
import {default as alias, a as a_a, b, c} from ‘./a’; ======>用在开头
第二、规范不同,require 是 CommonJS/AMD 规范,import 是 ESMAScript6+规范
第三、require 特点:社区方案,提供了服务器/浏览器的模块加载方案。非语言层面的标准。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
import 特点:语言规格层面支持模块功能。支持编译时静态分析,便于 JS 引入宏和类型检验。动态绑定。
9. javascript 对象的几种创建方式
参考答案:
第一种:Object 构造函数创建
var Person = new Object();
Person.name = “Nike”;
Person.age = 29;
这行代码创建了 Object 引用类型的一个新实例,然后把实例保存在变量 Person 中。
第二种:使用对象字面量表示法
var Person = {}; //相当于 var Person = new Object();
var Person = {
name: ‘Nike’;
age: 29;
}
对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。也就是说,第一种和第二种方式创建对象的方法其实都是一样的,只是写法上的区别不同
在介绍第三种的创建方法之前,我们应该要明白为什么还要用别的方法来创建对象,也就是第一种,第二种方法的缺点所在:它们都是用了同一个接口创建很多对象,会产生大量的重复代码,就是如果你有 100 个对象,那你要输入 100 次很多相同的代码。那我们有什么方法来避免过多的重复代码呢,就是把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。
第三种:使用工厂模式创建对象
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
};
return o;
}
var person1 = createPerson(“Nike”, 29, “teacher”);
var person2 = createPerson(“Arvin”, 20, “student”);
在使用工厂模式创建对象的时候,我们都可以注意到,在 createPerson 函数中,返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取。
(img-hbpKJkmv-1712167356500)]既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-JFEFzBOT-1712167356500)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取。
[外链图片转存中…(img-JBI8vIgj-1712167356500)]
-