JavaScript常见面试题
题目
var fun = function(){};
fun.prototype = {
info:{
name:'Peter',
age:18
}
};
var person1 = new fun();
var person2 = new fun();
person1.info.name = 'Jack';
person2.info.name = 'Tom';
console.log(person1.info.name,person2.info.name);// "Tom","Tom"
在这个代码中,fun函数本身没有定义任何属性或方法,它的原型对象中有一个名为info的属性,其属性值为一个对象,包含name属性值为Peter和age属性值为18。当person1和person2通过fun构造函数创建实例时,实例对象会先查找自身是否有info属性,由于没有,则需要在原型对象上查找,因此person1和person2的info属性值都是引用的原型对象中的info对象。 当person1赋值info对象中的name属性时,实际上是在原型对象的info对象上进行了修改。当person2赋值info对象中的name属性时,也是在原型对象的info对象上进行了修改。由于person1和person2在赋值时并没有修改自身的info属性,因此输出结果为"Tom","Tom"。
题目
var fun = function(){
this.info={
name:'Peter1',
age:25
};
};
fun.prototype = {
info:{
name:'Peter2',
age:18
}
};
var person1 = new fun();
var person2 = new fun();
person1.info.name = 'Jack';
person2.info.name = 'Tom';
console.log(person1.info.name,person2.info.name);//"Jack","Tom"
在这个代码中,fun函数是一个构造函数,其通过this关键字定义了一个info属性,其属性值为一个包含name属性值为'Peter1'和age属性值为25的对象。原型对象中也有一个名为info的属性,其属性值为一个包含name属性值为'Peter2'和age属性值为18的对象。当person1和person2通过fun构造函数创建实例时,实例对象先查找自身是否有info属性,如果有,则使用自身的info属性,否则需要在原型对象上查找。由于fun构造函数中使用了this关键字,因此person1和person2的info属性值是不同的,并且不是指向原型对象的info属性。因此,person1和person2修改自身的info属性中的name属性值时,只会影响到自身的info属性,不会影响到其他实例对象或原型对象中的info属性。这就是为什么输出结果为"Jack","Tom"的原因。
题目
var fun = function(){};
fun.prototype = {
name:'Peter',
age:18
};
var person1 = new fun();
var person2 = new fun();
person1.name = 'Jack';
person2.name = 'Tom';
console.log(person1.name,person2.name);//"Jack","Tom"
在这个代码中,fun函数是一个构造函数,其原型对象中包含name属性值为'Peter'和age属性值为18。当person1和person2通过fun构造函数创建实例时,实例对象先查找自身是否有name属性,如果有,则使用自身的name属性,否则需要在原型对象上查找。由于person1和person2通过实例化fun构造函数得到的对象是空对象,没有任何属性和方法,因此在查找实例对象的name属性时,会向原型对象上查找,由于原型链的特性,person1和person2的name属性值实际上都是来自于原型对象中的name属性,即'Peter',而不是空对象中的name属性。当person1和person2修改自身的name属性时,由于这两个属性都是定义在实例对象上而非原型对象上,这两个属性是各自独立的,因此修改person1的name属性不会影响到person2的name属性,输出结果为"Jack","Tom"。
题目
var m=1,j=k=0;
function add(n){
return n = n+1;
}
y = add(m);
function add(n){
return n = n+3;
}
z=add(m);
console.log(y,z)
4,4
题目
删除arr数组中第i个元素(重第一个元素开始)
let arr = [1,2,3,4]
// arr.splice(i-1,1)
题目
var x = new Boolean(false);
console.log(x) //都是 true
if(x){
alert('hi');
}
var y=Boolean(0);
console.log(y)//0 false 1 true
if(y){
alert('hello')
}
hi
题目
var msg='hello';
for(var i=0;i<10;i++){
var msg = 'hello'+i*2+i;
}
console.log(msg) //hello189
题目
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
题目
var a=b=3;
实际展开
b=3;
var a=b;
并不是主观认为
var a=3;
var b=3;
的简写
var a,b;
(function(){
console.log(a);
console.log(b);
var a=b=3;
console.log(a);
console.log(b);
})()
console.log(a);
console.log(b);
> undefined
> undefined
> 3
> 3
> undefined
> 3
题目
if(!"a" in window){
var a=1;
}
console.log(a)//undefined
题目
编写一个函数来查找字符串数组中的最长公共前缀
输入: ["flower","flow","flight"]
输出: "fl"
依次判断第一个字符串中的每一个字符是否与后面的相等
若不相等,直接返回之前存的
若相等,将这个字符加入 werps: 注意这里的循环,外面一层表示第一个字符串中的第几个字符,里面一层表示第一个字符串和第几个字符串来比
var longestCommonPrefix = function(strs) {
let wer = ''
for (let j = 0; j < strs[0].length; j++) {
for (let n = 0; n < strs.length-1; n++) {
if (strs[n+1].length > j) {
if (strs[0][j] !== strs[n+1][j]) {
return wer
}
} else {
return wer
}
}
wer += strs[0][j]
}
return wer
};
题目
给定一个整数数组nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:nums[0] + nums[1] == 9 ,返回 [0, 1]
let twoSum = function (nums, target) {
for (let i = 0; i < nums.length; i++) {
let iItem = nums[i]
console.log(iItem)
for (let j = 0; j < nums.length; j++) {
if (j == i) {
continue;
}
let jItem = nums[j]
console.log(jItem)
if (jItem + iItem == target) {
return [i, j]
}
}
}
};
//运行结果 [0,1]
题目
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度
- 输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。- 示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
var lengthOfLongestSubstring = function(s) {
// minIndex: 字符串某字母的最小index
let minIndex = 0
// len: 不重复字符串的最大长度
let len = 0
for(let i = 0; i < s.length; i++) {
s.indexOf(s[i], minIndex) < i ?
minIndex = s.indexOf(s[i], minIndex) + 1 : len = Math.max(len, i - minIndex + 1)
}
return len
};
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634028.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现