0

0

JavaScript高级程序设计(第3版)学习笔记2 js基础语法_基础知识

php中文网

php中文网

发布时间:2016-05-16 17:49:18

|

1263人浏览过

|

来源于php中文网

原创

这一篇复习一下ECMAScript规范中的基础语法,英文好的朋友可以直接阅读官方文档。JavaScript本质上也是一种类C语言,熟悉C语言的朋友,可以非常轻松的阅读这篇文章,甚至都可以跳过,不过建议你最好还是看一看,在介绍的同时,我可能会引用一些自认为不易理解且比较流行的用法。

基础语法

1、标识符:所谓标识符,实际上就是指一个满足一定规范,能够被引擎识别的名字,可以用来表示常量、变量、函数名、函数参数、对象、对象属性等所有可命名对象的名称。

(1)区分大小写。

(2)以字母、下划线(_)或美元符号($)开头,其它字符可以为字母、下划线、美元符号或数字。这里的字母包含扩展的ASCII或Unicode字符。

(3)标识符不能是关键字、保留字、true、false、null。(有些浏览器允许使用undefined,有些不能)。

(4)如果对象属性含有空格或其它特殊字符,可以用括号括起来作为一个整体。

2、关键字:在语言本身中有特定用途。

    break  case  catch  continue  debugger(ES5中新增)  default  delete  do  else  finally  for  function  if  in  instanceof  new  return  switch  this  throw  try  typeof  var  void  while  with

3、保留字:被语言本身保留,将来可能作为关键字。

Colourlab.ai
Colourlab.ai

好莱坞内容创作者依赖的AI色彩分级软件

下载

  ES3中的保留字:

    abstract  boolean  byte  char  class  const  debugger  double  enum  export  extends  final  float  goto  implements  import  int  interface  long  native  package  private  protected  public  short  static  super  synchronized  throws  transient  volatile

  ES5中的非严格模式下的保留字:

    class  const  enum  export  extends  import  super

  ES5的严格模式下的保留字:

    implements  interface  let(ES5中新增)  package  private  protected  public  static  yield(ES5中新增)

 4、严格模式:在ES5中引入严格模式,通过使用"use strict"来开启严格模式,可以在顶部开启全局严格模式,也可以在函数作用域范围内开启局部严格模式。

复制代码 代码如下:

"use strict"//开启全局严格模式,在ES3中,不会有任何影响function fn(){
  "use strict"//开启局部严格模式
}

5、注释:在ECMAScript中,支持两种格式的注释,单行注释和块级注释:
复制代码 代码如下:

// 单行注释,以两个斜杠//开头/*
* 多行(块级)注释,以一个斜杠/和一个星号*开头,一个星号和一个斜杠结尾,这里中间行的星号*不是必须的
*/

说明:随着JS代码越来越复杂,注释也变的越来越重要,而文档自动化也显得愈加重要,目前已经有很多开源JS库用于自动化生成类似于Javadoc的JS文档,比如JSDoc、YUIDoc等,这个时候,对注释也会有相应的格式要求,有兴趣的朋友可以找相关资料研究。

6、变量:变量在其本质上不过是内存空间在语言级别的外在抽象。

(1)动态类型:在ECMAScript中,变量是动态类型的,你可以在定义的时候初始化为一个Number类型,紧接着,你可以把一个字符串值赋给它:
复制代码 代码如下:

var age = 29;
age = 'twenty-nine';  //虽然有这种灵活性,但我建议你除非明确知道自己在做什么,否则别这样做。

(2)var操作符:变量使用var来声明,对于未初始化的变量,会默认为undefined,也可以直接使用变量而不声明(在我看来,这同样是一个没有存在理由的特性),它们之间最重要的区别就是使用var声明时,声明的变量只在当前作用域有效,而不使用var时,变量就会定义在全局作用域。可以通过下面的例子来体会其中的区别:
复制代码 代码如下:

var name = 'linjisong'; //定义全局变量并赋值
age = 29; //直接使用变量,相当于定义全局变量并赋值
//sal; //错误
var salary; //定义全局变量,未初始化
//这里只是函数声明,没有实际调用,所以内部定义的变量不会生效
function fn(){
var name = 'oulinhai';//定义局部变量并赋值
age = 23; //给全局变量赋值
work = 'it';      //没有使用var,即便是在函数局部的变量,也会成为全局变量
}
//函数实际调用前
console.info(salary);   //undefined
console.info(name);   // linjisong
console.info(age); // 29
try{
console.info(work);//由于在全局环境中没有定义work,这里会抛出异常
}catch(e){}
fn();//实际调用,代码中对于变量的变更会显现出来
console.info(name); // linjisong,由于函数内部使用了var,所以不会更改全局的name值
console.info(age); // 23
console.info(work); // it

(3)声明提升:这个问题在讲函数声明和函数表达式时还会再次谈到,这里先提一下,看代码:
复制代码 代码如下:

console.info(name);//undefined
console.info(getName);//getName()函数
console.info(getName());//undefined
try{
console.info(age);//异常
}catch(e){
console.info(e);//ReferenceError
}
console.info(getAge);//undefined
try{
console.info(getAge());//异常
}catch(e){
console.info(e);//TypeError
}
var name = 'linjisong';//变量声明,提升
age = 29;//直接使用全局变量,不提升
function getName(){//函数声明,提升
return name;
}
var getAge = function(){//变量getAge的声明,提升;获取年龄的匿名函数表达式,不提升
return age;
}
console.info(name);//linjisong
console.info(getName);//getName()函数
console.info(getName());//linjisong
console.info(age);//29
console.info(getAge);//获取年龄的匿名函数
console.info(getAge());//29

你有没有自己推断出上面的输出结果?如果已经推断出,可以跳过了,如果还存有疑问,那么先看看下面关于声明提升的描述,然后再回过头来印证上面的输出结果:
    A、引擎在解析时,首先会解析函数声明,然后解析变量声明(解析时不会覆盖类型),最后再执行代码;
    B、解析函数声明时,会同时解析类型(函数),但不会执行,解析变量声明时,只解析变量,不会初始化。
  这里涉及的只是全局作用域,在函数作用域中还有函数参数也和声明提升有关,在后面讲述函数时再讨论。
  上面的代码,首先会把第18行的函数声明和第16、21行的变量声明提升到最开始解析,然后再执行。因此第1、9行因为变量声明提升但尚未初始化,所以输出undefined,从而第11行因为无法确定是函数类型而抛出类型异常;第2、3行因为函数声明提升并且解析函数类型,所以第2行输出函数,第3行可以调用函数,但返回值未初始化而输出undefined;第5行因为尚未声明变量,会抛出引用异常。
(4)可以使用一条语句定义多个变量,用逗号分开即可。如:
复制代码 代码如下:

var name='linjisong',
age=29,
work='it';

(5)在ES5的严格模式下,不能定义名为eval或arguments的变量。
7、语句
(1)语句:以一个分号“;”结尾,如果省略分号,由解析器确定语句的结尾。
  对于JS中语句可以省略分号的特性,我想不到任何存在的理由,强烈建议每条语句均使用分号来明确结束,不要让解析器花费时间来“猜测”你的程序,而且,更加重要的是,在很多压缩工具中,猜测并不能保证百分百的正确。
(2)代码块:以左花括号({)开始,右花括号(})结束。
  在JS中虽然有代码块的概念,但是却没有相应的块级作用域,这是和一般类C语言所不同的。对于控制语句(比如if),不要因为只有一条语句就不使用代码块,这会给维护你程序的伙计种下犯错的种子。
复制代码 代码如下:

for(var i=0; i{
}
console.info(i);//输出10,在代码块之后仍可以访问i,说明JS无块级作用域
if(i //console.info(i); 不使用代码块,在维护时(比如添加1条语句)容易犯错
{
console.info(i);
}

 花括号({})除了作为代码块来使用外,还有一个很重要的用处就是定义对象字面量,这在后面还会再有论述。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

68

2026.02.11

Yandex网页版官方入口使用指南_国际版与俄罗斯版访问方法解析
Yandex网页版官方入口使用指南_国际版与俄罗斯版访问方法解析

本专题全面整理了Yandex搜索引擎的官方入口信息,涵盖国际版与俄罗斯版官网访问方式、网页版直达入口及免登录使用说明,帮助用户快速、安全地进入Yandex官网,高效使用其搜索与相关服务。

200

2026.02.11

虫虫漫画网页版入口与免费阅读指南_正版漫画全集在线查看方法
虫虫漫画网页版入口与免费阅读指南_正版漫画全集在线查看方法

本专题系统整理了虫虫漫画官网及网页版最新入口,涵盖免登录观看、正版漫画全集在线阅读方式,并汇总稳定可用的访问渠道,帮助用户快速找到虫虫漫画官方页面,轻松在线阅读各类热门漫画内容。

40

2026.02.11

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

4

2026.02.11

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

1

2026.02.11

Spring Boot企业级开发与MyBatis Plus实战
Spring Boot企业级开发与MyBatis Plus实战

本专题面向 Java 后端开发者,系统讲解如何基于 Spring Boot 与 MyBatis Plus 构建高效、规范的企业级应用。内容涵盖项目架构设计、数据访问层封装、通用 CRUD 实现、分页与条件查询、代码生成器以及常见性能优化方案。通过完整实战案例,帮助开发者提升后端开发效率,减少重复代码,快速交付稳定可维护的业务系统。

6

2026.02.11

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

159

2026.02.10

MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法
MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法

本专题汇总了MC.JS官网入口和网页版快速畅玩方法,提供免安装访问、不同版本(1.8.8、1.12.8)在线体验指南,以及正版网页端操作说明,帮助玩家轻松进入MC.JS世界,实现即时畅玩与高效体验。

89

2026.02.10

谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程
谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程

本专题汇总了谷歌邮箱网页版的最新登录入口和注册方法,详细提供官方账号快速访问方式、网页版操作教程及安全登录技巧,帮助用户轻松管理Gmail邮箱账户,实现高效、安全的邮箱使用体验。

78

2026.02.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 5.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.9万人学习

JavaScript
JavaScript

共185课时 | 25.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号