所有指标都是此代码应该有效。它不是。看看:
aString = "Why doesn't this work?";
if ( typeof aString == String) {
alert("I am a string!!!");
}
只有当我添加引号并使字符串变小时,它才有效。
aString = "This does work, but why?";
if ( typeof aString == 'string') {
alert("I am a string!!!");
}
答案 0 :(得分:0)
var a = 'str';
console.log(typeof a);
此处typeof a
返回'string'而非String
。String
是构造函数。这就是为什么在第一种情况下它不起作用。
答案 1 :(得分:0)
这是因为typeof
实际上返回一个声明该类型的字符串。
所以你必须将它与一个字符串进行比较,例如"string"
。
小心以下
var myString = new String('Hallo what's up');
console.log(typeof myString); // Object
答案 2 :(得分:0)
在浏览器控制台中运行以下两个代码,您就会知道其中的差异。
var abc = 'New string'
console.log(abc)
var def = new String('Another string')
console.log(def);
您正在将字符串与其构造函数进行比较。
阅读原始字符串值和String对象。
答案 3 :(得分:0)
aString = "Why doesn't this work?";
if ( typeof aString === String) {
console.log("I am a string, but typeof returns a string and not String constructor!!!");
}
aString = "Why does this work?";
if ( typeof aString === 'string') {
console.log("aString is a string and typeof aString returns 'string'!!!");
}
console.log("A string is not equal to its constructor->",'string' !== String);
console.log("Any strings constructor is equal to String constructor->",'string'.constructor === String);
console.log("This is not useful in typeof as all results are strings even if it is number or boolean ->",(typeof 43).constructor === String);
console.log("The useful comparison would be ->",typeof 43 === "number");
Table for return values of typeof
typeof "any string" === "string";//true
typeof new String('hey') === "object";//true
Object.prototype.toString.call(new String('hey')) === "[object String]";//true
typeof (new String('hey')).valueOf() === "string";//true
答案 4 :(得分:0)
只有代码的第二个版本是正确的,因为 typeof 旨在将对象的类型作为字符串表示形式返回。在字符串上使用typeof时,您会收到'string'。
中的详细信息