判断类型
typeof以及返回类型(都是字符串)
扩展
如何判断类型?
1.typeof
2.instanceof
3.Object.prototype.toString.call()
NaN的类型是number
注意
如下定义并赋值a,那么typeof一下a,返回的是什么类型?
1 2
| var a = function(){}; console.log( typeof a);
|
事实证明返回的是function
整理一下各个类型的typeof
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| typeof 37 === 'number'; typeof 3.14 === 'number'; typeof Math.LN2 === 'number'; typeof Infinity === 'number'; typeof NaN === 'number'; typeof Number(1) === 'number';
typeof "" === 'string'; typeof "bla" === 'string'; typeof (typeof 1) === 'string'; typeof String("abc") === 'string';
typeof true === 'boolean'; typeof false === 'boolean'; typeof Boolean(true) === 'boolean';
typeof Symbol() === 'symbol'; typeof Symbol('foo') === 'symbol'; typeof Symbol.iterator === 'symbol';
typeof undefined === 'undefined'; typeof declaredButUndefinedVariable === 'undefined'; typeof undeclaredVariable === 'undefined';
typeof {a:1} === 'object';
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
typeof new Boolean(true) === 'object'; typeof new Number(1) === 'object'; typeof new String("abc") === 'object';
typeof function(){} === 'function'; typeof class C{} === 'function' typeof Math.sin === 'function'; typeof new Function() === 'function';
|
转换类型
1.显式类型转换
调用转换方法,主动转换
a.Number()
b.String()
c.Boolean()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| var a = '123'; console.log( typeof Number(a) );
var a = 'hello'; console.log( typeof Number(a) );
var a = true; console.log( Number(a) );
var a = 123; console.log( typeof String(a) );
var a = true; console.log( String(a) );
var a = ''; console.log( Boolean(a) );
var a = 0; console.log( Boolean(a) );
|
2.隐式类型转换
被动转换,由JS程序自动进行转换。
+ - * / == 隐式类型转换
+ 数值 - 负数值
1 2 3 4 5 6
| var a = '1'; var b = 2;
console.log( a + b ); console.log( a - b );
|
比较类型
挑一些重点来说了,就不把知识点一一罗列了,具体可以查看w3cSchool
== 和 = 之间的区别
==进行比较,而=进行赋值操作
比较时候的几种情况
1.当两边都是字符串的情况下
按位进行比较,字符的unicode编码进行比较
1 2 3 4
| console.log( 'a' >= 'b' ); console.log( 'a'.charCodeAt() ); console.log( '5' >= '12' );
|
2.当两边不都是字符串的情况下
直接看如下代码吧
1 2 3 4
| console.log( 5 >= '12' ); console.log( true == 1 ); console.log( true == 2 );
|
查看字符对应的unicode编码方法:charCodeAt()
3.特殊类型的比较
null、undefined、NaN的比较
老规矩直接上代码,清晰明了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| null与undefined比较的时候,返回true。除了下面三种情况,跟其他任何值比较都是false console.log( null == null ); console.log( undefined == undefined ); console.log( null == undefined ); console.log( null == false ); console.log( null == true ); console.log( undefined == false ); console.log( undefined == true );
console.log( NaN == NaN ); console.log( Object.is(NaN , NaN) ); console.log( +0 == -0 ); console.log( Object.is(+0 , -0) );
|
其中 Object.is()
是ES6中为了修正历史遗留问题而推出的。
JS运算符(五大类)
因为运算符基本上不需要语言赘述,故直接扔上图和代码
1.算术运算符(10种)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
var a = 1; a++; ++a;
console.log( a++ ); console.log( ++a );
var a = 1; a++; ++a; console.log(a)
var a = '123'; console.log( typeof +a );
console.log( 2 ** 2 ** 3 ); console.log( 2 * 2 * 2 ); console.log( Math.pow(2,5) );
|
2.赋值运算符(简单、复合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
var a = 1; a = a + 2; console.log(a);
var a = 1; a += 2; console.log(a);
var a = 1; var b = 2; a = b + 3;
a++; a += 1;
var a = 1;
a = (a/=2) + a;
console.log(a);
|
3.比较运算符(8种)
1 2 3 4 5 6 7 8 9 10 11
|
console.log( 2 === '2' );
console.log( 2 != 3 );
console.log( 2 !== '2' );
|
4.逻辑运算符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
console.log( 1 < 2 && 5 > 4 );
console.log( 1 > 2 || 5 < 4 );
console.log( !(1 > 2) );
var 艺术生 = '小明'; var 高考成绩 = 300; var 艺考成绩 = 200; console.log( 艺术生 , 高考成绩>200 && 艺考成绩>100 );
var number = 70; console.log( 3 < number < 10 ); console.log( 3 < number && number < 10 );
|
5.条件运算符
三目运算符:条件?输出1:输出2
1 2 3 4 5 6
| console.log( false ? 1 : 2 ); console.log( false ? 1 : 2 ? 3 : 4 );
|