197

Does MATLAB have a function/operator that indicates the type of a variable (similar to the typeof operator in JavaScript)?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Dónal
  • 185,044
  • 174
  • 569
  • 824

6 Answers6

236

Use the class function:

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Daniel LeCheminant
  • 50,583
  • 16
  • 120
  • 115
71

The class() function is the equivalent of typeof().

You can also use isa() to check if a variable is of a particular type. If you want to be even more specific, you can use ischar(), isfloat(), iscell(), etc.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Dima
  • 38,860
  • 14
  • 75
  • 115
45

Another related function is whos. It will list all sorts of information (dimensions, byte size, type) for the variables in a given workspace.

>> a = [0 0 7];
>> whos a
  Name      Size            Bytes  Class     Attributes

  a         1x3                24  double              

>> b = 'James Bond';
>> whos b
  Name      Size            Bytes  Class    Attributes

  b         1x10               20  char 
Herman Wilén
  • 195
  • 12
gnovice
  • 125,304
  • 15
  • 256
  • 359
  • 1
    The [WHO](http://www.mathworks.de/de/help/matlab/ref/who.html) function does not list the size of variables. Because of that it is much faster if your workspace is crowded. – JaBe Jul 01 '14 at 16:42
28

Be careful when using the isa function. This will be true if your object is of the specified type or one of its subclasses. You have to use strcmp with the class function to test if the object is specifically that type and not a subclass.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Mike Katz
  • 2,060
  • 2
  • 17
  • 25
  • Is this a response to [Dima's answer](https://stackoverflow.com/questions/578519/how-to-get-the-type-of-a-variable-in-matlab/578546#578546)? – Peter Mortensen Mar 28 '21 at 17:21
5

Since nobody mentioned it, MATLAB also has the metaclass function, which returns an object with various bits of information about the passed-in entity. These meta.class objects can be useful for tests of inheritance (via common comparison operators).

For example:

>> metaclass(magic(1))

ans = 

  class with properties:

                     Name: 'double'
              Description: ''
      DetailedDescription: ''
                   Hidden: 0
                   Sealed: 0
                 Abstract: 0
              Enumeration: 0
          ConstructOnLoad: 0
         HandleCompatible: 0
          InferiorClasses: {0×1 cell}
        ContainingPackage: [0×0 meta.package]
     RestrictsSubclassing: 0
             PropertyList: [0×1 meta.property]
               MethodList: [272×1 meta.method]
                EventList: [0×1 meta.event]
    EnumerationMemberList: [0×1 meta.EnumeratedValue]
           SuperclassList: [0×1 meta.class]

>> ?containers.Map <= ?handle

ans =

  logical

   1

We can see that class(someObj) is equivalent to the Name field of the result of metaclass(someObj).

Dev-iL
  • 23,742
  • 7
  • 57
  • 99
0

MATLAB - Checking type of variables

class() exactly works like Javascript's typeof operator.

To get more details about variables you can use whos command or whos() function.

Here is the example code executed on MATLAB R2017a's Command Window.

>> % Define a number
>> num = 67

num =

    67

>> % Get type of variable num
>> class(num)

ans =

    'double'

>> % Define character vector
>> myName = 'Rishikesh Agrawani'

myName =

    'Rishikesh Agrwani'

>> % Check type of myName
>> class(myName)

ans =

    'char'

>> % Define a cell array
>> cellArr = {'This ', 'is ', 'a ', 'big chance to learn ', 'MATLAB.'}; % Cell array
>> 
>> class(cellArr)

ans =

    'cell'

>> % Get more details including type
>> whos num
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos myName
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> whos cellArr
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> % Another way to use whos i.e using whos(char_vector)
>> whos('cellArr')
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> whos('num')
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos('myName')
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> 
hygull
  • 8,464
  • 2
  • 43
  • 52