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

本文我们主要和大家分享javascript的基本语法和数据类型,当然还是最基础的不过多赘述,希望刚入门的同学还是看一下为好,不是看到这个标题觉得不就是语法和数据类型么,就那么点知识,早就会了。

1关键字和保留字

ECMA-262 描述了一组具有特定用途的关键字。这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是ECMAScript的全部关键字(带*号上标的是第5 版新增的关键字):

break do instanceof typeof

caseelsenewvarcatchfinallyreturnvoidcontinueforswitchwhiledebugger*functionthiswithdefaultifthrowdeleteintry

ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途。但它们有可能在将来被用作关键字。以下是ECMA-262 第3 版定义的全部保留字:

abstract enum int short

booleanexportinterfacestaticbyteextendslongsupercharfinalnativesynchronizedclassfloatpackagethrowsconstgotoprivatetransientdebuggerimplementsprotectedvolatiledoubleimportpublic

第5 版把在非严格模式下运行时的保留字缩减为下列这些:

class enum extends super

constexportimport

在严格模式下,第5 版还对以下保留字施加了限制:

立即学习“Java免费学习笔记(深入)”;

implements package public interface

privatestaticletprotectedyield

注意, 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

 NaN

NaN,非数值类型(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 == undefinedtrue“NaN” == NaNfalseNaN == NaNfalseNaN != NaNtruetrue == 2falseundefined == 0falsenull == 0false

全等:仅比较不转换
全等就比较严格了,在这里就不讨论什么了。
注意:null == undefined会返回true,但是null === undefined会返回false,这是由于他们的类型不一样

8 函数

函数对于任何语言来说都是一个核心的概念。
在这里主要说一个问题,细节会在后面继续讨论
我们都是知道在函数中的arguments表示所有传进来的参数,比如说

function foo(a,b,c){
console.log(arguments[2] === c);//true}

登录后复制

这个原因并不因为他们指向的是同一块内存,因为他们内存空间的值会相互同步,
arguments的值是不能被改写的如果改写的会操作

相关推荐:

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

javascript初学者实践使用

给JavaScript初学者的一些最佳实践

以上就是JavaScript初学者不知道的事(二)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2782483.html

(0)
上一篇 2025年3月8日 16:31:11
下一篇 2025年3月2日 19:51:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • js尾递归优化代码分享

    在学习数据结构和算法的时候,我们都知道所有的递归都是可以优化成栈+循环的。 对于特定的递归函数,一般我们都是手动对它们进行优化的。  在学习scala的时候,接触到尾递归的概念。我们只要将递归写成尾递归方式,编译器会自动帮助我们优化。 ps…

    编程技术 2025年3月8日
    200
  • js如何获取DOM元素

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。本文主要和大家分…

    编程技术 2025年3月8日
    200
  • vue.js获取当前点击对象方法实例

    熟悉jquery的小伙伴应该都知道jquery获取当前点击对象是有多么的粗暴,直接$(dom)获取当前点击的dom元素,根据这个,几乎可以获取这个dom元素的所有属性。不过,当我们使用vue的时候呢? 也许刚开始会有一点迷茫。唉?对啊,我用…

    2025年3月8日 编程技术
    200
  • JS如何判断页面对象为空

    本文主要和大家分享js如何判断页面对象为空,我们和大家分享了三种方法,希望能帮助到大家。第一种: function isEmptyObject(e) {    var t;        for (t in e)             r…

    编程技术 2025年3月8日
    200
  • js获取短信验证码按钮倒计时代码

    本文主要和大家分享js获取短信验证码按钮倒计时代码,希望能帮助到大家。   (function(){        // 快速咨询        $(‘#getCode’).click(function() {            var…

    2025年3月8日
    200
  • 如何从json提取的数据添加加到html中

    这次给大家带来如何从json提取的数据添加加到html中,从json提取的数据添加加到html中的注意事项有哪些,下面就是实战案例,一起来看一下。 JSON 格式 json 是 Ajax 中使用频率最高的数据格式,在浏览器和服务器中之间的通…

    编程技术 2025年3月8日
    200
  • javascript通过中文id和class获取元素的方法

    以前以为html元素中的id和class等只能通过字母数字或者下划线等特殊字符命名,如果单存使用中文浏览器不会报错,但是js是获取不到的,但是今天逛论坛的时候发现不是这样的。 代码如下: 运行结果: 论坛来源是这个: 立即学习“Java免费…

    2025年3月8日 编程技术
    200
  • javascript仿jquery的trigger触发鼠标事件实例分享

    项目过程中会使用到用户触发了一个事件,需要对另外一个元素同样进行触发相应的事件然后执行相应的代码,jquery中就可以通过trigger实现 trigger api 今天想了一下,如果没有jq,那用js是怎么实现的呢?最近第二次看《java…

    2025年3月8日
    200
  • javascript仿淘宝商品详情放大镜效果

    我们经常逛淘宝的时候到淘宝商品详情看的时候,会经常使用到商品图片的放大镜功能,以前一直不知道怎么实现,遇到基本上都是网上找代码改,今天就用原生的js实现以下放大镜效果。 实现原理: 准备好大图(清晰的)和小图,两张图片必须一样只是放大或者缩…

    编程技术 2025年3月8日
    200
  • javascript实现倒置字符串的方法

    本文主要和大家分享javascript实现倒置字符串的方法,希望能帮助到大家。 javascript倒置字符串的方法 方法一: var str = “abcdefg”;                //常规方法使用for循环加charAt…

    2025年3月8日
    200

发表回复

登录后才能评论