首页 > 代码库 > 【js实例】js中的5种基本数据类型和9种操作符

【js实例】js中的5种基本数据类型和9种操作符

js中的5中基本数据类型

js标识符

  1. 第一个字符必须为字母,下划线,或美元符
  2. 其他字符可以是字母,下划线,美元符,数字
  3. js标识符区分大小写
  4. 标识符不能使关键字和保留字

关键字:

breakdoinstanceoftypeof
caseelsenewvar
catchfinallyreturnvoid
continueforswitchwhile
debuggerfunctionthiswith
defaultifthrow 
deleteintry 

保留字:

abstractenumintshort
booleanexportinterfacestatic
byteextendslongsuper
charfinalnativesynchronized
classfloatpackagethrows
constgotoprivatetransient
debuggerimplementprotectedvolatile
doubleimportpublic 

 

js注释

//单行注释/*多行注释*/

 

js模式

严格模式:使用 use strict 

混杂模式:不加 use strict 

 

 

js数据类型

js中有5中简单数据类型,也成为基本数据类型:Undefined, Null, Boolean, Number, String

/*=======================================================Undefined类型只有一个值:undefined,表示未定义这个量为初始化的变量会自动赋予undefined值*/var message;alert(typeof message);    //undefinedalert(age);                //出错,不执行这条语句var message2;alert(typeof message2);    //undefinedalert(typeof age);        //undefined/*Null类型也只有一个值:null*/alert(typeof null);    //返回object,从逻辑角度来看,null值表示一个空对象指针                        实际上是浏览器的bug一直延续至今alert(undefined == null);    //返回true,undefined派生自null值/*Boolean类型只有两个值:true和false。注意:TRUE,True,FALSE,False不是Boolean类型,而是标识符可以对任何数据类型调用Boolean函数,总会返回一个Boolean值数据类型            转换为true的值                            转换为fasle的值Boolean             true                                     falseString             任何非空字符串                            ""(空字符串)Number            任何非零数值(包括无穷大)                    0和NaNObject            任何对象                                    nullUndefined         不适用                                    undefined*/alert(Boolean(true));        //truealert(Boolean(false));        //falsealert(Boolean("s"));        //truealert(Boolean(""));            //falsealert(Boolean(2));            //truealert(Boolean(Infinity));    //truealert(Boolean(0));            //falsealert(Boolean(NaN));        //falsealert(Boolean(new Object()));//truealert(Boolean(null));        //falsealert(Boolean(undefined));    //false/*Number类型进行算数运算时,所有的八进制和十六进制会转化为十进制数值*///十进制alert(23);         //23alert(23.3);    //23.3alert(2.3e4);    //23000//若数字为0开头则视为八进制,注意:八进制在严格模式下无效alert(070);        //56//十六进制的前两位为0xalert(0x33);    //51alert(Number.MAX_VALUE);//1.7976931348623157e+308alert(Number.MIN_VALUE);//5e-324/*若数值不在MIN_VALUE和Number.MAX_VALUE之间,1.num < 0, 返回-Infinity2.num > 0, 返回Infinity*/var num = Number.MAX_VALUE + 1;alert(num);        //Infinitynum = Number.MIN_VALUE - Number.MAX_VALUE;alert(num);        //-Infinity/*NaN:非数值,not a number。表示一个本来返回数值的操作数未返回数值的情况1.任何涉及NaN的操作都会返回NaN2.NaN和任何值都不相等*/alert(NaN - 10);    //NaNalert(NaN == NaN);    //false/*isNaN()接受一个参数x,若x不是数值则返回true,反之返回falseisNaN()接受参数x时会尝试将x转化为数值*/alert(isNaN(NaN));        //truealert(isNaN(10));        //falsealert(isNaN("10"));        //false "10"可以转化为数值10alert(isNaN("blue"));    //true     "blue"不可以转化为数值alert(isNaN(false));    //false true可转为1,fasle可转为0/*数值转换:Number(), parseInt()和parseFloat()*///1.如果是Boolean值,则true返回1,false返回0alert(Number(true));    //1alert(Number(false));    //0//2.如果是数值,则只是简单的传入和返回alert(Number(23));    //23//3.如果是null则返回0alert(Number(null));    //0//4.如果是undefined则返回NaNalert(Number(undefined));    //NaN//5.如果是NaN则返回NaNalert(Number(NaN));    //NaN//6.字符串//6.1:若字符串中包含数字则将其转换为十进制数即可;忽略前导0alert(Number("23"));    //23alert(Number("23.3"));    //23.3alert(Number("023"));    //23alert(Number("023.3"));    //23.3alert(Number("0xA"));    //10//6.2:若是空字符串,则转换为0alert(Number(""));        //0//6.3:若字符串包含上述格式之外的字符则将其转换为NaNalert(Number("23#"));    //NaN//7.若是对象,则调用valueOf()方法,按上述方法转换;若转换为NaN则调用toString()方法再次按上述方法转换var a = new Object();alert(Number(a));        //NaNa = "23";alert(Number(a));        //23//parseInt在解析字符串时和Number有点区别//1.忽略空格,若第一个字符为数字字符,则解析到非数字字符为止alert(parseInt("   123 4blue"));    //123,4前面的空格符是非数字字符//2.空字符串返回NaN,无法识别字符串也返回NaNalert(parseInt(""));            //NaNalert(parseInt("AF"));            //NaN//3.能解析各种格式整数alert(parseInt("0xA"));            //10alert(parseInt("70"));            //70alert(parseInt("070"));            //56,ECMAScript3认为是56,ECMAScript5认为是70alert(parseInt("0xf"));            //15//4.解析浮点数时,正数向下取整,负数向上取整alert(parseInt(22.9));            //22alert(parseInt(-22.9));            //-22//可以给parseInt传递第二个参数,指定转换的进制alert(parseInt("A", 16));    //10alert(parseInt(110, 2));    //6alert(parseInt(110, 8));    //72alert(parseInt(110, 10));    //110alert(parseInt(110, 16));    //272/*parseFloat()与parseInt类似;不过parseFloat()只解析十进制;若parseFloat()解析的是整数(也可没有小数点,或者小数点后全为0),则返回整数*/alert(parseFloat("0xA"));    //10alert(parseFloat("2.000"));    //2alert(parseFloat(2.000));    //2/*String类型EMCAScript中的字符串是不可变的,字符串一旦创建它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用一个包含新值得字符串填充该变量*/var lang = "Java";lang = lang + "Script";    //先创建一个字符串用"JavaScipt填充",再销毁原来的Java和Script字符串//Boolean,Number,String,Object类型都有toString()方法,但是null和undefined没有var t = true;    alert(t.toString());//truevar num = 16;alert(num.toString());        //16alert(num.toString(2));        //10000alert(num.toString(8));        //20alert(num.toString(10));    //16alert(num.toString(16));    //10num = 10;alert(num.toString(16));    //avar str = "23";alert(str.toString());        //23var a = new Object("2#");    //2#alert(a.toString());/*String()方法:如果值有toString()方法,则调用该方法;如果值是null则返回null;如果值是undefined则返回undefined*/var value1 = 10;var value2 = true;var value3 = null;var value4;alert(String(value1));    //10alert(String(value2));    //truealert(String(value3));    //nullalert(String(value4));    //undefined/*Obejct类型Object的每个实例都有下列属性和方法constructor:保存着用于创建当前对象的函数hasOwnProperty(propertyName):用于检查给定的属性当前对象实例中(不是实例的原型)是否存在isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型proPertyIsEnumerable(propertyName):用于检查给定的属性是否能使用for-in语句来枚举toLocaleString():返回对象的字符串表示toString():返回对象的字符串表示valueOf():返回对象的字符串,数值或布尔值表示*/var o = new Object();    //创建对象var o = {    "age" : 13}//给对象添加属性o.name = "libra";o.money = "100";//访问属性alert(o.age);        //13alert(o.name);        //libraalert(o["name"]);    //100//检测类型var str = "Nicholas";var bool = true;var int = 22;var undi;var nul = null;var ob = new Object();var arr = new Array();//typeof常用来检测基本类型值,也可用来检测引用类型值alert(typeof str);        //stringalert(typeof bool);        //booleanalert(typeof int);        //numberalert(typeof undi);        //undifinedalert(typeof nul);        //nullalert(typeof ob);        //objectalert(typeof arr);        //object/*instanceof 常用来检测引用类型值*///注意:所有引用类型值为Object实例,所以始终会返回true,但是基本类型不是对象,则返回false;alert(ob instanceof Object);        //truealert(str instanceof Object);        //falsealert(arr instanceof Object);        //truealert(arr instanceof Array);        //true

 

js操作符

js有9种操作符:一元操作符,位操作符,布尔操作符,乘性操作符,加性操作符,关系操作符,相等操作符,条件操作符,赋值操作符

/*一元操作符:+, -, ++, --+, -, ++, --可以作用于任何值*/var age = 10;alert(age++);    //10,下一个age是11alert(++age);    //执行++后为12alert(age--);    //12,下一个age是11alert(age);        //11alert(--age);    //执行--后为10alert(age + 10);    //20alert(age - 10);    //0//连接符alert("我有" + age + "岁了!");    //我有10岁了!/*位操作符:~, &, |, ^, <<, >>, >>>若对非数值应用位操作符,会先使用Number()函数将该值转换为一个数值(自动完成),然后再应用位操作。*///按位非~:操作数的负数减一alert(~1);            //-2alert(~"1");        //-2//按位与&:对应的二进制数进行逻辑与操作,返回1或0alert(25 & 3);        //1//按位与|:对应的二进制数进行逻辑或操作,返回1或0alert(25 | 35);        //59//按位与^:对应的二进制数进行逻辑异或操作,返回1或0alert(25^3);        //26//左移:二进制数左移n位,空位用0填充;a << n = a * 2^n;alert(2 << 3);        //16//有符号右移:二进制数右移n位,空位用符号位填充alert(25 >> 3);        //3//无符号右移对于正数,和有符号右移一样alert(64 >>> 5);    //2//无符号右移对于负数,二进制数右移n位,空位用0填充alert(-64 >>> 5);    //134217726/*布尔操作符:!, &&, ||&&, || 为短操作,即若是第一个操作数能决定结果则不会对第二个操作数求值可以应用于任何类型的操作数,返回布尔值true或false或操作数*///1.若操作数是一个对象则返回falsealert(!new Object(2));    //false//2.若操作数是空字符串则返回truealert(!"");                //true//3.若操作数是任何非空字符串则返回falsealert(!"@#4");            //false//4.若操作数是数值0则返回truealert(!0);                //true//5.若操作数是任何非零数值(包括无穷)则返回falsealert(!12);                //falsealert(!Infinity);        //false//6.若操作数是null,NaN,undefined则返回truealert(!null);            //truealert(!NaN);            //truealert(!undefined);        //true//对于逻辑与操作,若第一个操作数为false则结果为false//1.若第一个操作数为对象则返回第二个操作数alert(new Object("23") && "34");//34//2.若第二个操作数为对象,则当第一个操作数为true时返回该对象alert(true && new Object(2));    //2alert(false && new Object(2));    //false//3.//若两个操作数都为对象则返回第二个操作数alert(new Object("23") && new Object(2));    //2//4.若有一个操作数是null则返回nullalert(null && 2);                //nullalert(2 && null);                //null//5.若有一个操作数是NaN则返回NaNalert(NaN && 2);                //NaNalert(2 && NaN);                //NaN//6.若有一个操作数是undefined则返回undefinedalert(undefined && 2);            //undefinedalert(2 && undefined);            //undefined//7.任何数值(包括Infinity)为truealert(0 && 3);//对于逻辑或操作,若第一个操作数为true则结果为true//1.若第一个操作数是对象则返回该对象alert(new Object(2) || false);    //2//2.若第二个操作数是对象,则当第一个操作数为false时返回该对象alert(false || new Object(2));    //2//3.若两个操作数是对象,则返回第一个操作数alert(new Object(33) || new Object(3));//33//4.若两个操作数是null, NaN, Undefined,当操作数一样时则返回它们本身,不一样是返回第二个操作数alert(null || null);            //nullalert(NaN || NaN);                //NaNalert(undefined || undefined);    //undefinedalert(NaN || undefined);        //undefined/*乘性操作符:*, /, %*///乘法:*//1.若操作数都是数值则返回数值,若数值范围超过了ECMAScript的表示范围则返回Infinity和-Infinityalert(2 * 3.3);            //6.6alert(2 * Number.MAX_VALUE);//Infinity//2.任何NaN的操作返回NaNalert(2 * NaN);            //NaN//3.Infinity * 0 返回NaNalert(Infinity * 0);    //NaN//4.Infinity乘以非零数值则返回Infinity或者-Infinityalert(Infinity * 2);    //Infinityalert(Infinity * -2);    //-Infinityalert(Infinity * Infinity);        //Infinityalert(Infinity * -Infinity);    //-Infinity//5.若有操作数不是数值,则后台调用Number()方法转换,在应用上述规则alert(2 * "2");            //4alert(2 * "2#");        //NaN, 应为"2#"用Number()转换后为NaN//除法:///1.若操作数都是数值则返回数值,若数值范围超过了ECMAScript的表示范围则返回Infinity和-Infinityalert(2 / 2);            //1alert(2 / Number.MIN_VALUE);//Infinity//2.任何NaN操作都返回NaNalert(2 / NaN);            //NaN//3.Infinity / Infinity返回NaNalert(Infinity / Infinity);    //NaN//4. 0 / 0 返回NaNalert(0 / 0);            //NaN//5.非零有限数被零除则返回Infinity或-Infinityalert(0 / 23);            //0alert(23 / 0);            //Infinity//6.Infinity被任何非零数值除,则返回Infinity或-Infinityalert(Infinity / 4);    //Infinityalert(4 / Infinity);    //0//7.若有操作数不是数值,则后台调用Number()方法转换,在应用上述规则alert(2 / "2");            //1alert(2 / "2#");        //NaN, 应为"2#"用Number()转换后为NaN//求模:%//1.若操作数是数值则按常规计算alert(5 % 12);            //2//2.被除数是无穷,除数是有限数值则返回NaNalert(Infinity % 2);    //NaNalert(-Infinity % 2);    //NaN//3.若被除数是有限数值, 除数是无穷则返回被除数alert(2 % Infinity);    //2//4.若被除数是有限数值,除数是零则返回NaNalert(2 % 0);            //NaN//5.若被除数和除数都是Infinity则返回NaNalert(Infinity % Infinity);    //NaN//6.若被除数是0则结果是0alert(0 % 32);            //0//7.若有操作数不是数值,则后台调用Number()方法转换,在应用上述规则alert(2 % "2");            //0alert(2 % "2#");        //NaN, 应为"2#"用Number()转换后为NaN/*加性操作符:+, -*///加法+//1.任何NaN操作返回NaNalert(1 + NaN);                //NaN//2.Infinity + Infinity = Infinitu;Infinity - Infinity = NaN;alert(Infinity + Infinity);    //Infinityalert(Infinity + -Infinity);    //NaNalert(-Infinity + -Infinity);    //-Infinity, -(Infinity + Infinity)//3. 0 + 0 = 0; 0 - 0 = 0;alert((+0) + (+0));            //+0, +(0 + 0)alert((+0) + (-0));            //+0, +(0 - 0)alert((-0) + (-0));            //-0, -(0 + 0)//4.若操作数中有字符串,则+就是连接符,则调用toString(), 或String()方法将操作数变成字符串再进行拼接alert("##" + 23);            //"##23"alert(null + "3");            //"null3"//减法-//1.任何NaN操作返回NaNalert(1 - NaN);                    //NaN//2.Infinity + Infinity = Infinitu;Infinity - Infinity = NaN;alert(Infinity - Infinity);        //NaNalert(Infinity - -Infinity);    //Infinity, Infinity + Infinityalert(-Infinity - Infinity);    //-Infinity, -(Infinity + Infinity)//3. 0 + 0 = 0; 0 - 0 = 0;alert((+0) - (+0));                //+0, +(0 - 0)alert((+0) - (-0));                //+0, +(0 + 0)alert((-0) - (-0));                //-0, -(0 - 0)//4.若操作数中有字符串,则+就是连接符,则调用toString(), 或String()方等法将操作数变成字符串再进行拼接alert("##" - 23);                //NaN, "##"转换后为NaNalert(null - "3");                //-3,alert(3 - null);                //3alert(undefined - "3");            //NaNalert(3 - undefined);            //NaN/*关系操作符:>, <, <=, >= 返回true或false*///若两个操作数是数值,则执行数值比较alert(2 >= 3);//false//如果两个操作数是字符串,则比较两个字符串对应的字符编码值alert("a" > "3");//true//若有操作数不是数值,则将其转换为字符串进行比较alert(2 < "3");//true//若操作数是对象则调用valueOf(),toString()等方法转换后进行比较alert(new Object("2") >= 3);//false//若操作数是布尔值则先将其转换为数值再执行比较alert(true >= false);//true/*相等操作符:==, !=, ===, !====, !=:先转换再比较===, !==:仅比较不转换*/alert(true == 1);                //truealert(false == 0);                //truealert(true == 2);                //falsealert(false == -1);                //falsealert("23" == "23");            //truealert(new Object(2) == "2");    //truealert(null == undefined);    //truealert(null == 0);            //falsealert(undefined == 0);        //falsealert(NaN != NaN);            //truealert("2" == 2);    //true, 先将"2"转换为数值2在比较alert("2" === 2);    //false,直接进行比较alert("2" !== 2);    //true/*条件操作符: expression ? result1 : result2;*/var num = 1 > 2 ? 3 : 4;alert(num);            //4, 1 > 2 为假num = 1 < 2 ? 3 : 4;alert(num);            //3, 1 < 2 为真/*赋值和计算*/var num1, num2;num1 = num2 = 2;alert(num1 *= num2);//4num1 = num2 = 2;alert(num1 /= num2);//1num1 = num2 = 2;alert(num1 %= num2);//0num1 = num2 = 2;alert(num1 += num2);//4num1 = num2 = 2;alert(num1 -= num2);//0num1 = num2 = 2;alert(num1 <<= num2);//8num1 = num2 = 2;alert(num1 >>= num2);//0num1 = num2 = 2;alert(num1 >>>=num2);//0

 

【js实例】js中的5种基本数据类型和9种操作符