一些javascript题目
群里讨论过的题目,分享一下。
function test(){
var m=n=1;
alert(m);
}
alert(n);
//因为test函数没有执行,程度控制流不能进入进行解析,里面的东西对外面不可见,因此报错
function test(){
var m=n=1;
alert(m);
}
test();
alert(n);
//当test执行后,统统变成全局变量
function test() {
return 1
+2
}
alert(test())
类似的还有,由群里的abcd提供
function test() {
return 1
2
}
alert(test())
类似的还有,由群里的abcd提供
function test() {
return
2
}
alert(test())
类似的还有,由群里的abcd提供
function test() {
1
+2-
3
}
alert(test())
//考察JavaScript的EOS(分号)问题,注意操作符是否存在
上面这题也可以引出这么一题,由群里的abcd提供
function test() {
try {
return 1;
} finally {
return 2;
}
}
alert(test())
//一个函数执行后必定返回(return)一个结果,如果原函数体没有return语句必返回undefined。 //如果里面存在异常处理,finally块中的return 的优先级高于try 块中的return
alert(Number())
类似的还有,由群里的abcd提供
alert(+" 3 ")
//参见ECMA3-5th的第9.3节与15.7.1节。如果Number([value])的value不存在,则返回0
//一个字符串被执行了“+”,“-”等操作,相当于调用了Number(str),这时亦即相当于调用了toNumber函数
//这是一个内建函数,只存在于JS引擎中,对于这个str它会执行trim操作,再执行数字转换,
//如果能转换基本上转换为十进制(如0x12转为18),如果数字过大会使用指数,
//如果trim后得到的为Infinity,则直接转换它,如:
var a = +' Infinity ';
alert(typeof a) //number
//如果不能转换则返回NaN
var add = function(el){
alert(el === el+1)
}
//求el的值,让el === el+1成立!
//考察javascript的数值范围 add(Infinity) add(Number.MAX_VALUE) add(Number.POSITIVE_INFINITY) add(Number.NEGATIVE_INFINITY)
alert([1,2,3,4,5][0..toString.length])
//0..相当于0.0.,这里不能直接写0.toString,
//因为如果一个点会提示错误 ,JS引擎无法判断是小数点还是"."操作符
//http://www.cnblogs.com/rubylouvre/archive/2009/11/23/1608601.html
//接着就是取数字的toString方法的length属性,注意这里并没有执行toString
//所有函数都一个length属性,为其形参的个数,如
var fn = function(a,b){};
fn.length; // 2
//toString函数的形参为1,自己翻书吧,因此相当于[1,2,3,4,5][1]
alert('foo'.split('') + [])
//注意空函数的toString
类似的还有,
alert({a: 1, b: 2}[["b"]])
类似的还有,
alert(Array(2).join())
alert(i);
var i = 1;
function i(){}
alert(i);
//优先级问题
try {
alert(a);
}
catch (e) {
alert(e);
}
var a = 10;
alert(a);
try {
alert(b);
}
catch (e) {
alert(e);
}
b = 20;
alert(b);
//预编译问题
var x = 10;
alert(delete x);
try {
alert(x);
}
catch (e) {
alert(e);
}
eval('var y = 20');
alert(delete y);
try {
alert(y);
}
catch (e) {
alert(e);
}
//delete操作符,只能正确删除 没有用var 声明的变量
var x = 10;
alert(delete x); // false, as has {DontDelete}
alert(x); // 10
eval("var y = 20");
alert(delete y); // true
alert(y); // ReferenceError
var a = Function.prototype.call.apply(function (c) {return c}, [1,4,3]);
alert(a)
//相当于
var b = (function(a) {
return a;
}).call(0, 4, 3);
压轴,由群里的abcd提供
Number.prototype.a =
Number.prototype.b =
Number.prototype.c =
Number.prototype;
function f1() { return 1..a.b.c }
alert(f1())
//先看Number.prototype.a = Number.prototype;
//Number.prototype为Number的一个实例
//相当于 new Number 得0
//相当于1..a为0
//接着是0..b
//而b也是Number.prototype.b = Number.prototype;
//因此0..b为0
//最后的0..c为一样,为0
//delete操作符,只能正确删除 没有用var 声明的变量
var x = 10;
alert(delete x); // false, as has {DontDelete}
alert(x); // 10
eval("var y = 20");
alert(delete y); // true
alert(y); // ReferenceError
alert(1 == '1.')
后面调用了Number("1.") ==> parseInt("1.")
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
浙公网安备 33010602011771号