您当前的位置: 首页 > 学无止境 > JS经典实例 网站首页JS经典实例
javascript学习笔记-语法、关键保留字及变量和数据类型
发布时间:2018-04-05 17:36:53编辑:雪饮阅读()
检测浏览器是否开启javascript
<body>
<noscript>
javascript 不支持
</noscript>
</body>
变量符号还可以像php的变量符号一样
<script type='text/javascript'>
$a=3;
alert($a);
</script>
javascript中变量值被称为“字面量”
javascript中语句书写的一种不好的习惯(虽然也能执行)
(1)
<script type='text/javascript'>
var a=1
var b=2
alert(a)
alert(b)
</script>
(2)
<script type='text/javascript'>
var a=1,b=2,c=3;alert(a);alert(b),alert(c);
</script>
对象的一种优雅的创建方法
json的一种优雅的创建方法
var box=new Object();
box.a='b';
alert(typeof box);
console.log(box);
alert一个方法名时会将该方法的完整构造结构打印出来
function box(){}
alert(box);
typeof直接在后面跟上参数,也可以用括号包含参数。参数可以是变量、字面量、数组、对象等。
$a={};
alert(typeof $a);
alert(typeof new Object());
alert(typeof [{name:'xy'}]);
alert(typeof 220807);
alert(typeof(220807));
仅声明未赋值的变量默认隐式赋值undefined
当一个变量不存在,或者存在但未赋值都会被typeof检测为undefined,若直接alert则不存在的变量直接报错,存在但未赋值的变量 输出为undefined
当一个变量为null时弹出值为null,typeof检测其类型为object
undefined是派生自null的,因此ECMA-262规定对它们的相等性测试返回为true。
alert(undefined==null);
javascript支持八进制number类型变量,但输出仍然是十进制
八进制数值字面量,(以8为基数),前导必须是0,八进制序列(0-7)
例如这里的八进制070输出的结果是十进制的56
var box=070;
alert(box);
对于无效八进制会在输出时自动去除前导零,然后十进制输出
例如079在输出时直接输出为79
十六进制字面量前面两位必须是0x,后面是(0-9以及A-F),十六进制变量输出仍然是以10进制输出
例如0x1F输出为31,由于十六进制左边为1代表已经满16进1了,而右边为f即15,所以总值为31
对于浮点型变量,和日常用的小数一样,只是在小数末尾的0在输出时会被自动去除,另外还有一种特殊的浮点型即当整数部分为0时可以不要前面的0
var box=0.80;
var box2=.8;//有效但不推荐此写法
alert(box2);
由于浮点型占用内存空间是整型的两倍,所以ECMAscript会将可以转换为整型的浮点型自动转换为整型
var box=8.0;//输出为8
var box2=8.;//输出为8
alert(box);
alert(box2);
对于较大或较小的数可以使用科学计数法的表达式来表示
var box=4.12e3;//输出为4120,相当于4.12乘以10的3次方
var box2=0.00000000000000000412;//输出为4.12e-18
alert(box);
虽然浮点数值的最高精度是17位小数,但算术运算中可能会不精确。由于这个因素,做判断的时候一定要考虑到这个问题(比如使用整型判断)
alert(0.1+0.2);//输出为0.30000000000000004
javascript可以直接获取number类型值的最值
alert(Number.MIN_VALUE);//最小值
alert(Number.MAX_VALUE);//最大值
如果超过了浮点数值范围的最大值或最小值,那么就出现Infinity(正无穷)或者-Infinity(负无穷)。
alert(100e1000);//超出范围,Infinity
alert(-100e1000);//超出范围,-Infinity
javascript也可以直接获取正无穷和负无穷
alert(Number.POSITIVE_INFINITY);//正无穷
alert(Number.NEGATIVE_INFINITY);//负无穷
isFinite函数可以判断一个数字是否超过number类型的范围,如果超过则返回false,否则返回true
var box=100e10;
var box2=100e1000;
alert(isFinite(box));
alert(isFinite(box2));
关于NaN,即非数值(Not a Number)是一个特殊值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。在其它语言中任何数除以0都会导致错误而终止程序执行。但在ECMAscript中会返回出特殊的值,因此不会影响程序执行。
//0除以0返回NaN
alert(0/0);
//非0除以0返回正无穷
alert(13/0);
//正无穷乘以0返回NaN
alert(13/0*0);
//可以通过直接得到NaN这个值
console.log(Number.NaN);
//NaN与任何数运算的结果还是NaN,NaN又不相当于NaN(因为可能是正无穷、除以0等不同情况下得到的)
alert(NaN+1);
alert(NaN==NaN);
//ECMA提供了isNaN函数,用来判断这个值到底是不是NaN。isNaN函数在接收到一个值后,会先尝试将这个值转换为数值。
//返回为true,即NaN则表示值不为数字
alert(isNaN(0/0));
//返回值为false,即表示值是数字
alert(isNaN(0/1));
//由于字符串25可以转换为数值,所以此处返回为false即视为数值
alert(‘25’);
//true和false也可以转换为数值
alert(isNaN(false));
//isNaN函数也适用于对象。在调用isNaN()函数过程中,首先会调用valueOf()方法,
然后确定返回值是否能够转换为数值。如果不能,则基于该返回值再调用toString()方法,再测试返回值。
var box={};
var box2={
toString:function(){
return 123;
}
};
alert(isNaN(box));
alert(isNaN(box2));
有3个函数可以把非数值转换为数值:Number(),parseInt()和parseFloat()。Number()函数是转型函数,可以用于任何数据类型,而另外两个则专用于把字符串转成数值。
alert(Number(false));//1,boolean类型的true和false分别转换成1和0
alert(Number(25));//数值类型则直接返回
alert(Number(null));//空对象返回0
alert(Number(NaN));//NaN,undefined返回NaN
只包含数值的字符串会直接转换成十进制数值,如果包含前导0,就自动去掉
alert(Number('456'));
alert(Number('070'));
只包含浮点数值的字符串,会直接转换成浮点数值,如果包含前导和后导0,就自动去掉。
alert(Number('08.90'));
如果字符串是空,那么直接传成0
alert(Number(''));
如果不是空串、数字串、浮点数值串的字符串则会返回NaN
alert(Number('gao123'));
如果是对象,首先调用valueOf方法,然后确定返回值是否能够转换成数值,如果转换的结果是NaN,则基于这个返回值再调用toString()方法,再测试返回值。
var box={
toString:function(){
return '123';
}
}
alert(Number(box));
由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用的是parseInt()。
alert(parseInt('456lee'));//456,会返回整数部分
alert(parseInt('lee123lee'));//NaN,如果第一个不是数值,就返回NaN
alert(parseInt('12ee56dd'));//12,从第一个数值开始取,到最后一个连续数值结束
alert(parseInt('56.12'));//56,小数点不是数值会被去掉
alert(parseInt(''));//NaN,空返回NaN
parseInt除了能识别十进制数值,也可以识别八进制和十六进制。
alert(parseInt('0xA'));//10,十进制
alert(parseInt('070'));//56,八进制
alert(parseInt('0xALee'));//10,十六进制,Lee被自动过滤
ECMAscript为parseInt提供了第二个参数,用于解决各种进制的转换。
alert(parseInt('0xAF'));//175,十六进制
alert(parseInt('0xAF',16));//175,十六进制
alert(parseInt('AF',16));//175,第二参数指定十六进制可以去掉0x前导
alert(parseInt('AF'));//NaN,理所当然
alert(parseInt('101010101',2));//341二进制转换
alert(parseInt('70',8));//56,八进制转换
parseFloat用于浮点数值转换的,和parseInt一样,从第一位解析到非浮点数值位置。
alert(parseFloat('123Lee'));//123,去掉不识别的部分
alert(parseFloat('0xA'));//0,不识别十六进制
alert(parseFloat('123.4.5'));//123.4,只认一个小数点
alert(parseFloat('0123.400'));//123.4,去除前导和后导
alert(parseFloat('1.234e7'));//12340000,把科学计数法转换成普通数
转义序列
//\n换行
alert("dmj \n love \n xy");
//\t制表符
alert("dmj \t love \t xy");
//"\"符号还可以转义特殊字符原型输出
alert("输出单引号:\'"+"输出双引号:\""+"输出斜杠本身:\\");
/*"\nn"以十六进制代码nn表示的一个字符(0-F),将nn这个16进制值转换成10进制值,
然后依据ascii码表中的十进制对应值的对应字符输出
附上一个16进制转换10进制的算法公式:
16进制:03a3
转换10进制:03a3=3a3=3x16^2+ax16^1+3*16^0=768+160+3=931
例:\x41
*/
alert('\x41');
/*
"\unnn"以十六进制代码nnn表示的一个Unicode字符(0-F)。
结果10进制值为931
例:\u03a3输出为∑(参照unicode对照表中发现∑符号有两条记录,其中一条的值就是03a3,另外一个是加粗的该符号)
*/
alert('\u03a3');
值转换为字符串
var box=1;
alert(typeof box);
alert(typeof box.toString());
值转换为字符串(按进制输出)
var box=10;
alert(box.toString());
alert(box.toString(2));
alert(box.toString(8));
alert(box.toString(10));
alert(box.toString(16));
值转换为字符串(强制转换)
toString不能将null和undefined转换为字符串,可以使用强制转换。
使用该方法进行转换的时候,若参数不是null或者undefined则调用其toString函数获取返回值,否则就以null或者undefined的字符串形式作为返回值
var box=undefined;
var box2=null;
alert(String(box));
alert(String(box2));
对象的创建
//字面量的形式创建对象
var box={};
alert("box:"+typeof box);
//new的方式创建对象
var box1=new Object();
alert("box1:"+typeof box1);
//Object()是对象构造,如果对象不需要传参,则可以不要括号
var box2=new Object;
alert("box2:"+typeof box2);
//new传参的创建方式
var box3=new Object(2);
alert("box3:"+typeof box3);
alert("box3-value:"+box3);
//这里对象和数值能运算是因为javascript内部将对象toString后并和数值进行了进制转换后才计算的
var box3Operation=box3+101;
alert("box3-operation:"+box3Operation);
//创建指定类型的对象
//创建数值类型对象
//创建数值对象时若默认没有传参,则值为0
var box4=new Number();
alert(box4);
var box5=new Number(60);
alert(box5);
//创建字符串类型对象
var box6=new String("雪饮");
alert(box6);
关键字词:javascript,语法,保留字,变量,数据类型