如果值是字符串,为什么这不适用于JavaScript?

时间:2016-09-27 09:50:21

标签: javascript

所有指标都是此代码应该有效。它不是。看看:

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!!!");
}

5 个答案:

答案 0 :(得分:0)

var a = 'str';
console.log(typeof a);

此处typeof a返回'string'而非StringString是构造函数。这就是为什么在第一种情况下它不起作用。

答案 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'。

您可以阅读ECMAScript® 2016 Language Specification

中的详细信息