重拾ECMAScript5基础——数据类型+操作符

2017-07-11  本文已影响0人  JacobMa1996

操作符

1.一元操作符

//一元加或减
                var a = -10;
                alert(+a);//-10
                var b = 'b';
                alert(+b);//NaN
                var c = 10;
                alert(-c);//-10
                var d = '10';
                alert(-d);//-10

2.位操作符

3.布尔操作符

//双逻辑非
              alert(!!'blue');//true
              alert(!!NaN);//false

4.乘性操作符

若为数值,正常计算,若有操作数不是数值,则在后台调用转换成数值,再应用下面规则

//*
                console.log(NaN * 1);//NaN
                console.log(Infinity * 0);//NaN
                console.log(Infinity * 1);//Infinity
                console.log(Infinity * Infinity);//Infinity
///
                console.log(NaN / NaN);//NaN
                console.log(Infinity / Infinity);//NaN
                console.log(0 / 0);//NaN
                console.log(1 / 0);//Infinity
                console.log(Infinity / 1);//Infinity  
//%
                console.log(Infinity % 1);//NaN
                console.log(1 % 0);//NaN
                console.log(Infinity % Infinity);//NaN
                console.log(1 % Infinity);//1
                console.log(0 % 1);//0 只要被除数为0

5.加性操作符

若为数值,则相加;
若为非数值,则:

//+
                console.log(1 + 2);//3
                console.log(NaN + 1);//NaN
                console.log(+0 + +0);//+0
                console.log(-0 + -0);//-0
                console.log(+0 + -0);//+0
                console.log(Infinity + Infinity);//Infinity
                console.log(-Infinity + -Infinity);//-Infinity
                console.log(+Infinity + -Infinity);//NaN
                console.log(5 + '5');//'55'
                console.log('abc' + 'd');//abcd
                console.log('abc' + new Object());//abc[object Object]
                console.log('abc' + new Boolean(true));//abctrue
                console.log('abc' + undefined);//abcundefined
                console.log('abc' + null);//abcnull
//-
                console.log(2 - 1);//1
                console.log(NaN - 1);//NaN
                console.log(Infinity - Infinity);//NaN
                console.log(-Infinity - -Infinity);//NaN
                console.log(Infinity - -Infinity);//Infinity
                console.log(-Infinity - Infinity);//-Infinity
                console.log(+0 - +0);//+0
                console.log(+0 - -0);//+0 有出入
                console.log(-0 - -0);//+0
                console.log('a' - 1);//NaN
                console.log(new Boolean(true) - 1);//0
                console.log(null - 1);//-1
                console.log(undefined - 1);//NaN

6.关系操作符

先转换为数值,后比较;
若为对象,则调用vauleOf()方法,若没有,则调用toString()方法,后比较;

  //> < >= <=
                console.log(3 > 2);//true
                console.log('b' > 'A');//true 比较其对应的字符编码(ASCII码)
                console.log('23' < '3');//true 因为是字符串,比较字符编码
                console.log('a' < 3);//false 将'a'转换成了NaN
                console.log(NaN > 1);//false

7.相等操作符

==,===
先强制转换操作数为数值,再进行比较;

//相等操作符
                console.log(null == undefined);//true
                console.log(null == 0);//false
                console.log(undefined == 0);//false
                console.log(NaN == NaN);//false
                console.log(false == 0);//true
                console.log('5' == 5);//true
                console.log(new Object() == 1);//false
                
                var obj = new Object();
                console.log(new Object() == new Object());//false
                console.log(obj == obj);//true

8.条件操作符

即三元表达式

//条件操作符
                var num1 = 1,num2 = 2;
                var max = (num1 > num2) ? num1 : num2;
                console.log(max);//2

9.赋值操作符

10.逗号操作符

可以在一条语句中执行多个操作

                var num1 = 1, num2 = 2, num3 = 3;
                var num = (5, 1, 4, 8, 0);
                console.log(num);//0

数据类型

1.Undefined

undefined,声明的变量未初始化,但尚未定义的变量会报错;

//Undefined
  var message;
  alert(message);//'undefined'
  alert(age);//ReferenceError

2.NULL

null,表示一个空对象指针(typeof null返回'object'),如果定义的变量在将来用来保存对象,最好初始化为null;
undefined值派生自null,出自比较目的会typeof会转换操作数使得:

//Null
  var car = null;
  alert(typeof car);//'object'
  alert(null == undefined);//true

3.Boolean

true和false,区分大小写,所有类型值都可以转换为布尔值;

//String
                console.log(Boolean('abc'));//true
                console.log(Boolean(''));//false
//Number
                console.log(Boolean(1));//true
                console.log(Boolean(Infinity));//true
                console.log(Boolean(0));//false
                console.log(Boolean(NaN));//false
//Object
                console.log(Boolean(new Object()));//true
                console.log(Boolean(null));//false
//Undefiend
                console.log(Boolean(undefined));//false

基本包装类型扩展:最好永远不要使用Boolean();

4.Number

//浮点数
              console.log(1.1);//1.1
              console.log(1.);//1
              console.log(.1);//0.1
              console.log(3.125e7);//31250000
//八进制与十六进制
              console.log(070);//56
              console.log(0xA);//10
//数值范围
              console.log(Number.MAX_VALUE);//1.7976931348623157e+308
              console.log(Number.MIN_VALUE);//5e-324
              console.log(isFinite(Number.MAX_VALUE + 0.1e+308));//false 注:超出范围不多时显示true
              console.log(isFinite(NaN));//false
//isNaN
                console.log(isNaN('a'));//true
                //对于对象,依次调用valueOf()和toString()方法;
//Number
                console.log(Number('hello world'));//NaN
                console.log(Number(''));//0
                console.log(Number('00011'));//11
                console.log(Number(true));//1
                //对于对象,依次调用valueOf()和toString()方法;
//parseInt()
                console.log(parseInt('a123'));//NaN
                console.log(parseInt('123a'));//123
                console.log(parseInt(''));//NaN
                console.log(parseInt(22.5));//22
                console.log(parseInt(0xA));//10
                console.log(parseInt('AF',16));//175
                console.log(parseInt('10',2));//2
//parseFloat()
                console.log(parseFloat('0xA'));//NaN
                console.log(parseFloat('22.5'));//22.5

基本包装类型扩展:
Number();
toFixed(),toExponential(),格式化为字符串了;

//基本包装类型
                var num1 = 10.005;
                var num2 = 10;
                console.log(num1.toFixed(2));//'10.01'
                console.log(num2.toFixed(2));//'10.00'
                console.log(num2.toExponential(1));//'1.0e+1'

5.String

字符串,用于表示由0或多个16位Unicode字符组成的字符序列;
在ES中,双引号与单引号表示的字符串完全相同;

//转义字符
                console.log('1\n2');//1(换行)2
                console.log('\u03a0');//Π(希腊字符)
//转换为字符串
                var num = 10;
                console.log(num.toString());//'10'
                console.log(num.toString(2));//'1010'
                console.log(num.toString(8));//'12'
                console.log(num.toString(10));//'10'
                console.log(num.toString(16));//'a'

基本包装类型扩展:
1.字符方法

//字符方法 charAt charCodeAt
                var str = 'hello world';
                console.log(str.charAt(1));//e
                console.log(str.charCodeAt(1));//101
                console.log(str[1]);//e

2.字符串的操作方法

//slice,substr,substring 返回子字符串
                console.log(str.slice(3));//'lo world'
                console.log(str.substring(3));//'lo world'
                console.log(str.substr(3));//'lo world'
                console.log(str.slice(3,7));//'lo w'
                console.log(str.slice(3,7));//'lo w'
                console.log(str.substring(3,7));//'lo w'
                console.log(str.substr(3,7));//'lo worl'

                console.log(str.slice(-3));//'rld'
                console.log(str.substring(-3));//'hello world'
                console.log(str.substr(-3));//'rld'
                console.log(str.slice(3,-4));//'lo w'
                console.log(str.substring(3,-4));//'hel' 即substring(0,3)
                console.log(str.substr(3,-4));//'' 即substr(3,0)

3.字符串的位置

//字符串的位置
                console.log(str.indexOf('o'));//4
                console.log(str.lastIndexOf('o'));//7
                console.log(str.indexOf('o',6));//7
                console.log(str.lastIndexOf('o',6));//4

4.trim()

//trim()
                var str3 = '   hello world   ';
                console.log(str3.trim());//hello world

5.大小写的转换

//大小写转换
                var str4 = 'HELLO world';
                console.log(str4.toUpperCase());//'HELLO WORLD'
                console.log(str4.toLocaleUpperCase());//'HELLO WORLD' 针对地区的方法(更稳妥)
                console.log(str4.toLowerCase());//'hello world'
                console.log(str4.toLocaleLowerCase());//'hello world'

6.字符串的模式匹配

//字符串的模式匹配
                var text = 'cat,bat,sat,fat';
                var pattern = /.at/;
                console.log(text.match(pattern)[0]);//'cat' match返回一个数组
                console.log(text.search(/at/));
                console.log(text.replace('at','ond'));//'cond,bat,sat,fat'
                console.log(text.replace(/at/g,'ond'));//'cond,bond,sond,fond'
                //特殊字符序列 $n 匹配第n个捕获组的子字符串?
                console.log(text.replace(/(.at)/g,'word($1)'));//'word(cat),word(bat),word(sat),word(fat)'
                //replace第二个参数为函数 转义函数
                var text2 = '<p class="greeting">hello world</p>';
                console.log(text2.replace(/[<>"&]/g,function(match,pos,originalText){
                    switch(match) {
                        case '<' : return '<';
                        case '>' : return '>';
                        case '&' : return '&';
                        case '\"' : return '"';
                    }
                }));
                //<p class="greeting">hello world</p>
                //split()
                var color = 'red,blue,green,yellow';
                console.log(color.split(','));//["red", "blue", "green", "yellow"]
                console.log(color.split(',',2));//["red", "blue"]
                console.log(color.split(/[^\,]+/));//["", ",", ",", ",", ""] 注:分隔符为除逗号以外的字符

7.localeCompare()

//localeCompare() 比较字符串在字母表中的排列顺序
                var str5 = 'yellow';
                console.log(str5.localeCompare('brick'));//1
                console.log(str5.localeCompare('yellow'));//0
                console.log(str5.localeCompare('zoo'));//-1

8.fromCharCode()

//fromCharCode() String的方法 接收字符编码,转换成一个字符串
                console.log(String.fromCharCode(104,101,108,108,111));//'hello'

9.HTML方法
尽量不使用

6.Object

ECMA-262 把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。

Object是ECMAScript中所有对象的基础,是一种引用类型,引用类型是对象定义(类);

                var obj = new Object();
                console.log(obj.constructor);//构造函数
                console.log(obj.hasOwnProperty(propertyName));//检查属性是否在当前实例中
                console.log(obj.isPrototypeOf(object));//检查传入对象是否是当前对象的原型
                console.log(obj.propertyIsEnumerable(propertyName));//检查属性是否可枚举
                console.log(obj.toLocaleString());//
                console.log(obj.toString());//
                console.log(obj.valueOf());//

               //示例如下
                function NewObj () {
                    this.name = 'newObj';
                }

                var newObj = new NewObj();
                console.log(newObj);//NewObj {name: "newObj"}
                console.log(NewObj);//function NewObj() {this.name = 'newObj';}
                console.log(newObj.constructor);//function NewObj() {this.name = 'newObj';}
                console.log(newObj.hasOwnProperty('name'));//true
                console.log(NewObj.prototype);//Object {constructor: function}
                console.log(NewObj.prototype.isPrototypeOf(newObj));//true
                console.log(newObj.prototype);//undefined
                console.log(newObj.__proto__);//Object {constructor: function}
上一篇 下一篇

猜你喜欢

热点阅读