



本节将通过题型化案例训练读者灵活应用数据类型和变量。
1.阅读下列程序,写出x、y、z的终值。
2.下面代码的输出值是什么?
3.阅读下面代码,判断输出值,并解释原因。
var a;
alert(typeof a);
alert(b);
4.阅读下面代码,判断每个表达式的值,并解释原因。
var undefined;
undefined == null;
1 == true;
2 == true;
0 == false;
0 == '';
NaN == NaN;
[] == false;
[] == ![];
5.阅读下面代码,判断foo的值和类型。
var foo ="11"+2-"1";
console.log(foo);
console.log(typeof foo);
6.阅读下面代码,写出输出值。
var a=new Object();
a.value=1;
b=a;
b.value=2;
alert(a.value);
7.阅读下列代码,将会输出什么?
8.阅读下面代码,判断输出结果。
9.阅读下面代码,判断输出结果。
10.阅读下面代码,判断输出结果。
11.阅读下面代码,判断输出结果。
var a=10;
a.pro=10;
console.log(a.pro+a);
var s='hello';
s.pro='world';
console.log(s.pro+s);
12.阅读下面代码,判断输出结果。
console.log(typeof fn);
function fn() {};
var fn;
13.阅读下面代码,判断输出结果。
代码题参考答案
1.x=1、y=4、z=4。
解析:JavaScript在预编译期会使用function add(n){ return n=n+3;}覆盖掉前面声明的add方法。
2.100、undefined、101。
解析:本题重点考查变量作用域,以及函数调用返回值问题,函数nAdd()没有声明返回值,则默认返回值为undefined。
3.undefined、报错。
解析:使用var声明变量,但未对其赋值进行初始化时,这个变量的默认值为undefined,而变量b未声明先使用将报错。注意,未声明和未赋值是不同的概念。
4.true、true、false、true、true、false、true、true
解析:本例各个特殊值比较说明如下。
☑ Undefined与Null相等,但不恒等(===)。
☑ 一个是Number,一个是String时,会尝试将String转换为Number。
☑ 尝试将Boolean转换为Number,即0或1。
☑ 尝试将Object转换成Number或String,取决于另外一个对比量的类型。
所以,对于0、空字符串的判断,建议使用“===”。“===”会先判断两边的值类型,类型不匹配时为false。
5.值为111,类型为Number。
解析:先转换为字符串相连接,然后再转换为数字相减。
6.2。
解析:考察引用数据类型应用技巧。
7.undefined和2。
解析:上面代码相当于下面代码。
函数声明和变量声明会被JavaScript引擎隐式提升到当前作用域的顶部,但是只提升名称不会提升赋值操作。
8.function a() {}、2。
解析:var和function会提前声明,且function优先于var声明。所以提前声明后输出的a为function,然后代码往下执行,a被重新赋值,所以第二次输出为2。
9.10、报错、30。
解析:function(){}内声明的变量是局部变量,而没有使用var声明的变量是全局变量。while{}、if{}、for(){}之内声明的变量都是全局变量,除非其被包含在function内。
10.10。
解析:function和var会提前声明,而{...}内的变量也会提前声明。代码还没执行前,a变量已经被声明,于是'a' in window返回true,a被赋值。
11.NaN、'undefined 'hello'。
解析:给基本类型数据加属性不报错,但是引用的话返回undefined,10+undefined返回NaN,而Undefined和String相加时转变成了字符串。
12.function。
解析:因为函数声明优于变量声明。在代码逐行执行前,函数声明和变量声明会提前进行,而函数声明又会优于变量声明,这里的优于可以理解为晚于变量声明后,如果函数名和变量名相同,函数声明就能覆盖变量声明。所以以上代码将函数声明和变量声明调换顺序还是一样的结果。
13.true、true、false。
解析:undefined和false都是特殊数据类型,但是用双引号就不是本身类型了,而是字符串,空串相当于false,否则是true。
1.在JavaScript中如何检测一个变量是String类型?
提示:
String类型有两种生成方式:
var str ="hello world";
var str2=new String("hello world");
参考代码:
2.编写一个函数,检测参数是否为函数?
参考:
3.为了保证页面输出安全,经常需要对一些特殊的字符进行转义,编写一个函数escapeHtml,将<、>、&、"进行转义。
参考:
4.实现一个函数clone,对JavaScript中的5种主要的数据类型(Number、String、Object、Array、Boolean)进行值复制操作。
参考: