您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

JavaScript初学者不知道的事(二)

2025/4/14 12:28:18发布36次查看
本文我们主要和大家分享javascript的基本语法和数据类型,当然还是最基础的不过多赘述,希望刚入门的同学还是看一下为好,不是看到这个标题觉得不就是语法和数据类型么,就那么点知识,早就会了。
1关键字和保留字ecma-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是ecmascript的全部关键字(带*号上标的是第5 版新增的关键字):
breakdoinstanceoftypeof
case else new var
catch finally return void
continue for switch while
debugger* function this with
default if throw delete
in try
ecma-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途。但它们有可能在将来被用作关键字。以下是ecma-262 第3 版定义的全部保留字:
abstractenumintshort
boolean export interface static
byte extends long super
char final native synchronized
class float package throws
const goto private transient
debugger implements protected volatile
double import public
第5 版把在非严格模式下运行时的保留字缩减为下列这些:
classenumextendssuper
const export import
在严格模式下,第5 版还对以下保留字施加了限制:
implementspackagepublicinterface
private static let protected
yield
注意, let 和yield 是第5 版新增的保留字;其他保留字都是第3 版定义的。为了最大程度地保证兼容性,建议大家将第3 版定义的保留字外加let 和yield 作为编程时的参考。
在实现ecmascript 3 的javascript 引擎中使用关键字作标识符,会导致”identifier expected” 错误。而使用保留字作标识符可能会也可能不会导致相同的错误,具体取决于特定的引擎。
第5 版对使用关键字和保留字的规则进行了少许修改。关键字和保留字虽然仍然不能作为标识符使用,但现在可以用作对象的属性名。一般来说,最好都不要使用关键字和保留字作为标识符和属性名,以便与将来的ecmascript 版本兼容。
除了上面列出的保留字和关键字,ecma-262 第5 版对eval 和arguments 还施加了限制。在严格模式下,这两个名字也不能作为标识符或属性名,否则会抛出错误。
2数据类型ecmascript中有五种简单数据类型(也叫做基本的数据类型):undefined    .boolean,string,null,number.还有一种复杂的数据类型(有时候也叫引用数据类型)–object,object本质上是一组无序的键值对组成的。ecmascript不支持任何创建自定义类型的机制,而所有的值都是上述的六种数据类型之一。
 typeof这个操作符(这里说的不是函数,因为它不是一个函数)一般是在调试的时候使用,它的返回值有六个:undefined(值为定义),boolean(布尔值),string(字符串),number(数字),object(这个值是对象或者null),function(这个值是函数)。
对应于正则表达式而言,他其实也是对象(regexp类型的对象)的另一种形式,但是对于chrome7和safari5之前的版本返回的是function其他的浏览器返回的是object
下面我们来看一个简单的例子
var msg; //如果没有赋值,默认是undefinedtypeof msg;  //undefined// age 没有定义typeof age; //undefined
这个结果又逻辑上的合理性。因为虽然这两种变量从技术角度上看是有本质的区别的,但是实际上那种变量都是不可能执行真正的操作的。
即使未初始化的变量会自动被赋值为undefined,但是显示的初始化变量仍然是明智的选择,如果能过做到这一点,那当typeof操作符返回的是undefined的时候,我们就能确定这个变量还没有被声明
 null和undefined的关系console.log(undefined == null)  // trueconsole.log(undefined === null)  // false
实际上undefined值是由null派生出来的,这是因为在ecma-262中规定他们的相等性要返回true。
尽管null和undefined有这样的关系,但是他们的用途是完全不同的,在任何情况下都没有必要把一个变量的值设置为undefined但是同样夫人规则对应于null就是不合适的。以为只要意在保存对象变量还没有保存真正的变量的时候,就应该明确的让变量保存null。这样做不仅可以体现null作为空指针的惯例,而且能进一步的区分null和undefined
number类型number类型应该是ecmascript中最令人关注的数据类型了,这种类型是使用的ieee754来表示整数和浮点数值
var num1 = 070;  //表示八进制数var num2 = 079   //无效的八进制数  表示79var num3 = 0x1f  //十六进制数
八进制的字面量在严格模式下是无效的,会导致javascript引擎报错
浮点数值var f1 = 0.1;
var f2 = .1;  //虽然是有效的0.1但是不推荐var f3 = 1.0; //会自动转换为1
对于有些极大的或者极小的数值也可以用科学计数法表示,
var f4 = 3.125e7; //31250000
在这里还是要提示一下众所周知的浮点数不能比较相等法则,
在javascript中浮点数的最高精度是17位的小数,但在进行算术计算的时候精确度远远不如整数,例如0.1+0.2不等于0.3而是等于0.0000000000000004(4e-17)
这是使用基于ieee754数据浮点计算的通病
数据范围由于内存的限制,ecmascript并不能保存世界上所有的数,能保存的数能在浏览器中显示出来(通过number.max_value),最小值是(number.min_value)
当超出这个范围的时候,大于就变为infinity,小于就变为-infinity
var big = number.max_value + number.max_value;
console.log(big);  //infinity
可以使用isfinite()函数判断这个值是否在最大值和最小值之间,如果在就返回true
通过访问number.negative_infinity和number.positive_infinity来得到-infinity和infinity
 nannan,非数值类型(not a number)是一个特殊的值,这个数值表示一个应该返回数值的情况结果没有返回数值,在ecmascript中,任何数值除以0并不会导致错误,会返回一个nan,因此并不会影响代码的运行。
nan本身有两个特点:任何设置nan的操作都会返回nan,这个特点在多步计算的时候可能导致错误,其次nan和任何数值都不想等,包括本身:
console.log(nan == infinity)
console.log(nan == 1)
console.log(nan == nan)
console.log(nan == 1/0)//以上结果返回的都是false//下面是判断数据类型isnan(nan)  //trueisnan('123') //false,进行了数据类型的转换isnan('f5') //trueisnan(4)   //false
运用isnan()函数可以判断这个变量是否是nan类型的。
最神奇的是isnan也是支持对象操作的,在基于对象调用isnan函数时,会首先调用对象的valueof方法,然后确定该方法返回的值是否可以转换为数值,如果不能就基于这个返回值再调用tostring()方法,在测试返回值
string对应于string类型,讨论的会比较少一点,string类型用于友零或者多个16位的unicode字符组成的字符序列,即字符串。js中的单引号和双引号是没有区别的(想对于php来讲)。
 字符字面量转义的只是在这里就不多说了,
字面量在这里只说一点:
var text = this is \u30a3这个的长度是9因为\u30a3转义后表示一个字符
字符串的特点字符串在我们平常的开发当中我们是一直在用的,但是很少人知道其中的原理,下面我们就来讨论一下字符串的特点。
ecmascript中的字符串是不可变的,也就是说,字符串一旦被创建,他们的值就不能被改变。要改变某个变量保存的字符串就先要销毁原来的字符串,然后用一个新的值来填充该变量,例如下面的代码:
var lang = 'java';
lang = lang + 'script';
以上的代码是变量lang中包含字符串‘java’。而第二行代码把lang的值重新定义为‘java’与’script’的结合,实际上这个操作过程如下:
1. 首先创建一个能容纳10个字符的新字符串
2. 然后将这个字符串中填充’java’和’script’
3. 最后一步是销毁原来的’java’字符串和’script’字符串,因为这两个字符串已经没用了
转换为字符串在这里主要注意的是null和undefined是没有tostring()方法的,如果想要把他们转换为字符串可以使用转型函数string(),能把任何类型的值转换为字符串var val = null;string(val)
当使用数值转换为字符串的时候,可以在tostring()传递一个参数,表示把数值变为多少进制的字符串:var num = 10;num.tostring(2)返回的是1010;
4 object类型ecmascript中对象其实就是一组数据和功能的集合。
三种实例化一个对象的方法:
var o = new ocject();var o = new object;//不推荐使用var o = {};//当今最常用的
object中的对象和属性在后面我们在去讨论
5 javascript中+的作用这个我们在这里说的具体一点
1. 加法运算
console.log(1+2)
字符串的连接
var a =121,
   b =56,
   c =ss;
console.log(a+b);//12156console.log(a+c);//121ss
数值和字符串之间的转换
//字符串转换我数值var a = "21212";
+a //21212var b = "ss";
+a //nanvar c= "0xff";
+a //255
//数值转换为字符串var a =45;
+a; //"45"
//布尔值的转换+true //1+fasle //0
6 javascript中-的作用减号的作用一般是都是用在正规的操作(也就是类型相同)的操作中,信息量虽然不是很大,但是还是有很多需要注意的地方,下面来举几个例子
var a = 5-true; //4 ,true被转换了var b = nan -1;//nanvar c= 5-2 //3var d = 5-"2";//3 “2”被转换为2var e = 5-null; //5 null被转换为了0
7 相等操作符在我们编程的时候,当使用比较的时候我们希望,有的时候类型不同可以数值一样就可以就好像(2和"2")是可以相等的,但是有时候我们希望要求数值和类型都是一样的才返回真。这就很矛盾了,在ecmascript中的解决方案是提供两组操作数:相等和全等
相等:先转换在比较
列出一下比较特殊的比较结果
表达式值
null == undefined true
“nan” == nan false
nan == nan false
nan != nan true
true == 2 false
undefined == 0 false
null == 0 false
全等:仅比较不转换
全等就比较严格了,在这里就不讨论什么了。
注意:null == undefined会返回true,但是null === undefined会返回false,这是由于他们的类型不一样
8 函数函数对于任何语言来说都是一个核心的概念。
在这里主要说一个问题,细节会在后面继续讨论
我们都是知道在函数中的arguments表示所有传进来的参数,比如说
function foo(a,b,c){
console.log(arguments[2] === c);//true}
这个原因并不因为他们指向的是同一块内存,因为他们内存空间的值会相互同步,
arguments的值是不能被改写的如果改写的会操作
相关推荐:
javascript初学者不知道的事(一)
javascript初学者实践使用
给javascript初学者的一些最佳实践
以上就是javascript初学者不知道的事(二)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product