超坑的前端笔试题
1.给基本数据类型添加属性
js中数据类型包含基本数据类型和引用类型,基本类型包括:
string、null、undefined、number、boolean。
引用类型即是对象比如:array 、function以及自定义对象等等。
我们可以给引用数据类型添加属性
var myObj=new Object();
// myObj.name='tom';
// console.log(myObj.name);
给基本数据类型添加属性
var a = 10;
// a.biu = 10;
// console.log(a.biu + a);
虽然我们可以给基本类型动态添加属性,
但是在我们在调用这个属性会丢失,返回undefined。
不会报错,但在系统检查为原始数据类型的瞬间会被删除
2.隐式的全局变量
var a=1
function func(){
var b=2
}
func()
console.log(b) //打印结果为
var a = 1
function func() {
a = b = 2
}
func()
console.log(b) // ?
JS中不用var声明的变量默认是全局变量,而这里的连等使的情况更加隐蔽。
这里的b是全局的,因此func外可以访问。
3.关于return
function foo1() {
return {
bar: "hello"
};
}
function foo2() {
return;
{
bar: "hello"
};
}
console.log(foo1());
console.log(foo2());
在foo2()中遇到包含return语句的行(没有其他内容)时,
会在return语句之后立即自动插入分号。
4.for循环?’,’
for (var i = 0, j = 0;j<7, i < 4; i++ , j++) {
console.log(i);
}
var x = (1, 2, 3);
// console.log(x) //打印结果为
var f = (function f() { return "1"; },
function g() { return 2; })();
console.log(typeof f)
//打印结果为
var f = (function g() { return 2; })();
逗号操作符的优先级别在所有运算符中是最低的,结合方向是"自左至右"的。
如果遇到逗号操作符,说明当前的语句并没有执行结束。
5.js预解析
预解析做了两件事情:一个是查找语法错误,另一个就是声明提升。
JS在预解析时只会将变量的声明提升,而不包括变量的值。
var uname = 'jack'
console.log(uname)
var uname='lily'
console.log(uname)
打印结果为
var uname = 'jack'
function arr() {
console.log(uname) // ?
var uname = 'lily'
console.log(uname)
}
arr()
预解析之时,var声明的变量会全部提升至所属作用域最高并赋值undefined。
js中没有代码块的概念,只有函数可以限定作用域,函数内部是一个完整的作用域结构。
预解析会提升声明至当前作用域中最高,函数中定义,则提升至函数作用域最高。
#后记#
这个文章里面很多题是从其他博主的文章里面看到的,如果有相同的内容还请见谅。因为分享这个内容的时间很久远,无法找到转载信息,因此标注为原创,希望看到的读者不要误会。如有侵权,请提醒我,我会删除,谢谢。