Pertanyaan Periksa apakah suatu variabel adalah string dalam JavaScript


Bagaimana saya bisa menentukan apakah suatu variabel adalah string atau sesuatu yang lain dalam JavaScript?


1172
2017-10-30 14:36


asal


Jawaban:


Kamu dapat memakai typeof operator:

var booleanValue = true; 
var numericalValue = 354;
var stringValue = "This is a String";
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"

Contoh dari halaman web ini. (Contoh sedikit dimodifikasi).


1095
2017-10-30 14:40



Inilah yang berhasil untuk saya:

if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else

1457
2018-02-24 19:38



Sejak 580+ orang telah memilih jawaban yang salah, dan 800+ telah memilih jawaban gaya senapan yang bekerja, saya pikir mungkin layak untuk mengulangi jawaban saya dalam bentuk yang lebih sederhana yang dapat dipahami semua orang.

function isString(x) {
  return Object.prototype.toString.call(x) === "[object String]"
}

Atau, sebaris (Saya memiliki pengaturan UltiSnip untuk ini):

Object.prototype.toString.call(myVar) === "[object String]"

FYI, jawaban Pablo Santa Cruz salah, karena typeof new String("string") aku s object

Jawaban DRAX adalah akurat dan fungsional, dan harus menjadi jawaban yang benar (karena Pablo Santa Cruz benar-benar salah, dan saya tidak akan menentang suara populer.)

Namun, jawaban ini juga pasti benar, dan sebenarnya jawaban terbaik (kecuali, mungkin, untuk saran penggunaan lodash/menggarisbawahi). disclaimer: Saya berkontribusi pada basis kode lodash 4.

Jawaban asli saya (yang jelas terbang di atas banyak kepala) berikut:

Saya mentranskode ini dari underscore.js:

['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'].forEach( 
    function(name) { 
        window['is' + name] = function(obj) {
              return toString.call(obj) == '[object ' + name + ']';
    }; 
});

Itu akan mendefinisikan isString, isNumber, dll.


Di Node.js, ini dapat diimplementasikan sebagai modul:

module.exports = [
  'Arguments', 
  'Function', 
  'String', 
  'Number', 
  'Date', 
  'RegExp'
].reduce( (obj, name) => {
  obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
  return obj;
}, {});

100
2017-07-21 11:59



Saya sarankan menggunakan fungsi built-in dari jQuery atau lodash / Underscore. Mereka lebih mudah digunakan dan lebih mudah dibaca.

Entah fungsi akan menangani kasus DRAX yang disebutkan ... yaitu, mereka kedua periksa apakah (A) variabelnya adalah string literal atau (B) itu adalah instance dari objek String. Dalam kedua kasus, fungsi-fungsi ini dengan benar mengidentifikasi nilai sebagai string.

lodash / Underscore.js

if(_.isString(myVar))
   //it's a string
else
   //it's something else

jQuery

if($.type(myVar) === "string")
   //it's a string
else
   //it's something else

Lihat Lodash Documentation for _.isString () untuk lebih jelasnya.

Lihat Dokumentasi jQuery untuk $ .type () untuk lebih jelasnya.


78
2018-01-06 20:43



function isString (obj) {
  return (Object.prototype.toString.call(obj) === '[object String]');
}

Saya melihat itu di sini:

http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/


28
2017-07-24 19:07



Anda dapat menggunakan sumber terbuka ini dapat digunakan kembali adalah komponen string untuk memeriksa apakah var adalah string sambil menghindari penyalinannya.

Contoh:

 isString(3) // => false
 isString('') // => true

Juga, ini caranya isString diimplementasikan di AngularJS:

function isString(value) {return typeof value === 'string';}

23
2018-02-10 13:10



Cara terbaik:

var s = 'String';
var a = [1,2,3];
var o = {key: 'val'};

(s.constructor === String) && console.log('its a string');
(a.constructor === Array) && console.log('its an array');
(o.constructor === Object) && console.log('its an object');
(o.constructor === Number || s.constructor === Boolean) && console.log('this won\'t run');

Masing-masing telah dibangun oleh fungsi kelas yang sesuai, seperti "Objek baru ()" dll.

Juga, Duck-Mengetik: "Jika terlihat seperti bebek, berjalan seperti bebek, dan berbau seperti bebek - itu pasti Array" Artinya, periksa propertinya.

Semoga ini membantu.

Sunting; 12/05/2016

Ingat, Anda selalu dapat menggunakan kombinasi pendekatan juga. Berikut ini contoh penggunaan peta inline tindakan dengan jenis:

var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];

Berikut ini contoh 'dunia nyata' lainnya tentang penggunaan peta sebaris:

function is(datum) {
    var isnt = !{ null: true, undefined: true, '': true, false: false, 0: false }[ datum ];
    return !isnt;
}
console.log( is(0), is(false), is(undefined), ... );  // >> true true false

Fungsi ini akan menggunakan [custom] "type-casting" - lebih tepatnya, "type - / - value-mapping" - untuk mengetahui apakah sebuah variabel benar-benar "ada". Sekarang Anda bisa memisahkan rambut jahat itu null& 0!

Banyak kali Anda bahkan tidak peduli dengan tipenya. Cara lain untuk menghindari mengetik adalah menggabungkan set Duck-Type:

this.id = "998";  // use a number or a string-equivalent
function get(id) {
    if (!id || !id.toString) return;
    if (id.toString() === this.id.toString()) http( id || +this.id );
    // if (+id === +this.id) ...;
}

Kedua Number.prototype  dan  String.prototype punya .toString() method. Anda hanya memastikan bahwa string yang setara dengan nomor itu sama, dan kemudian Anda memastikan bahwa Anda memberikannya ke dalam http berfungsi sebagai Number. Dengan kata lain, kami bahkan tidak peduli apa jenisnya.

Harapan yang memberi Anda lebih banyak untuk bekerja dengan :)


15
2018-04-25 13:15



Diambil dari lodash:

function isString(val) {
   return typeof val === 'string' || ((!!val && typeof val === 'object') && Object.prototype.toString.call(val) === '[object String]');
}

console.log(isString('hello world!')); // true
console.log(isString(new String('hello world'))); // true

7
2017-09-06 05:06



Saya suka menggunakan solusi sederhana ini:

var myString = "test";
if(myString.constructor === String)
{
     //It's a string
}

6
2017-11-06 21:21



Solusi sederhana adalah:

var x = "hello"

if(x === x.toString(){
// it's a string 
}else{
// it isn't
}

5
2018-02-25 15:00



Jika Anda bekerja di lingkungan node.js, Anda cukup menggunakan fungsi built-in isString in utils.

const util = require('util');
if (util.isString(myVar)) {}

Edit: seperti yang disebutkan oleh @Jehy, ini sudah tidak berlaku lagi sejak v4.


5
2017-11-13 01:40