JavaScript高级程序设计里面说
typeof会返回5个值Undefined、Null、Boolean、Number和String
但
function a(){}
alert(typeof a);
这里返回的是function
为什么没有说呢
typeof会返回5个值Undefined、Null、Boolean、Number和String
但
function a(){}
alert(typeof a);
这里返回的是function
为什么没有说呢
请参阅
运算符优先级 | 运算符总结
要求
版本 1
返回一个用来表示表达式的数据类型的字符串。typeof[()expression[]] ;
expression 参数是需要查找类型信息的任意表达式。说明
typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。typeof 语法中的圆括号是可选项。要求
版本 1
里面说的是对变量或值调用function是对象把
"undefined",如果变量是Undefined型的。
"boolean",如果变量是Boolean型的。
"number",如果变量是Number型的。
"string",如果变量是String型的。
"object",如果变量是一种引用类型或Null类型的。
而
==是引用左边的值和右边的值做比较。。
左边为初始化。当然就错啦。
alert(oTemp == undefined);
oTemp1 = 11;
alert(oTemp1 == undefined);
oTemp2;
alert(oTemp2 == undefined);
这里前面两个都可以
第三个就不可以
那是不是一定要有"指定的值"或者用var才能定义呢
那
oTemp2;
这个算是什么东西了呢
完全没用的东西?
var oTemp;
alert(oTemp == undefined);
oTemp1 = 11;
alert(oTemp1 == undefined);
这样会出错
会说oTemp1;未定义oTemp;
var oTemp;
alert(oTemp == undefined);
oTemp1 = 11;
alert(oTemp1 == undefined);
这样就没有问题为什么呢
这两种定义的方法又有什么差别
你这样写和。。
wc = oTemp1;
不是一样的么?
不还是要引用oTemp1的值么?
而
var oTemp1;
则是声明变量。。所以没有引用起值
不过我已经弄明白了原来如果用
var oTemp1;
来声明变量script会把他放到程序运行之前来声明
看看这个例子
oTemp1;
alert(typeof oTemp1);
var oTemp1;
其实真正的执行顺序是这样的
var oTemp1;
oTemp1;
alert(typeof oTemp1);
所以不会出错而
oTemp1;
oTemp1 = 11;
alert(oTemp1 == undefined);
这里出错其实跟后面两行没关系
因为程序运行到oTemp1;这一行就已经出错了因为没有声明oTemp1而
oTemp1 = 11;
不会出错就是书上说的那样(估计有“指定的值”是“用该变量名创建一个全局变量”的必要条件)这样所有问题都可以解答了
因为未声明的变量进行任何操作都会出错
但就除了 typeof 运算 依然返回undefined 而没有报错
虽然是没有报错 但还是不能用在其他运算中
例如
alert(typeof oTemp1);
alert(undefined == oTemp1);
第二行就会报错
说明oTemp1在typeof运算中没有出错
但也没有被声明还有就是
alert(a);
var a=1;
这里返回的是undefined
那我估计实际的执行顺序是
var a
alert(a);
a=1;
对于var a=1;这种形式的声明
声明部分提前了
但赋值部分还是在原来的位置
alert(a);
var a=1;
这里的undefined是未声明的undefined而其实是未初始化的undefined
当然这些都是我推论没错才有的结论还要查查资料先还有的是
alert(a);
a=1;
这样alert(a);还是会出错
那我估计程序执行的顺序是
alert(a);
var a;
a=1;
这种方式的声明不会被提前执行最后结论是var这种程序执行顺序跟function是一致的