文档章节

JavaScript学习笔记2:JavaScript基本概念

slyso
 slyso
发布于 2015/07/27 22:06
字数 2784
阅读 67
收藏 0

JavaScript语言的 核心特性在ECMA-262中是以名为 ECMAScript 伪语言的形式来定义的。
ECMAScript 包含了所有基本的语法、操作符、数据类型以及完成基本的计算任务所必需的对象,但是 没有对取得输入和产生输出的机制作出规定。理解ECMAScript  及其纷繁复杂的各种细节,是理解其在Web浏览器中的实现---JavaScript的关键。目前大多数实现所遵循的都是 ECMA-262 第3版,但很多都已经开始着手实现第5版了。以下简要总结了ECMAScript中基本的要素。
1)ECMAScript  的 基本数据类型包括  Undefined、Null、Boolean、Number和String
2)与其他语言不同,ECMAScript    没有为整数和浮点数值分别定义不同的数据类型, Number类型可用于表示所有数值
3)ECMAScript    也有一种 复杂的数据类型 ,即 Object 类型,该类型是这门语言中所有对象的基础类型。
4) 严格模式 为这门语言中容易出错的地方施加了限制。
5)ECMAScript  提供了很多与C 及其他类C语言中相同的基 本操作符,包括算数操作符、布尔操作符、关系操作符、相等操作符及赋值操作等。
6)ECMAScript   从其他语言借鉴了很多流控制语句,例如if、for、switch  ,还又一些和其他语言很不同的,比如 for in
7)无须指定函数的返回值,因为ECMAScript  函数都可以在任何时候返回任何值。
8)实际上,未指定返回值的的函数返回的是一个特殊的undefined 值。
9)ECMAScript  也没有函数签名的概念,因为其函数参数是以一个包含零或者多个值的数组的形式传递的。
10)可以向ECMAScript  函数传递任意数量的参数,并且可以通过arguments 对象来访问这些参数
11)由于不存在函数签名的特性,ECMAScript  函数不能重载

1、语法
1)区分大小写
ECMAScript 中的一切(变量、函数名和操作符)都区分大小写。PHP是变量区分,函数名不区分。
2)标识符:第一个字符必须是字母、下划线_或美元符号$,其他字符也可以是数字
标识符中的字母也可以包含扩展的ASCII或Unicode字符,但是不推荐。
按照惯例,标识符采取驼峰大小写格式,也就是第一个字母小写,剩下每个单词首字母大写,如firstSecond、myCar、doSomethingImportant。
3)注释
//    /*  */
多行注释推荐如下:
/*
*
*
*/
4)严格模式
ECMAScript  5引入了严格模式概念(strict mode),严格模式为JS定义了一种不同的解析与执行模型。
要在整个脚本中启用严格模式,可以在顶部添加如下代码:
"use strict"
这其实是一个编译指示,告诉支持的JavaScript引擎切换到严格模式。
函数内部的上方包含这条提示,也可以指定函数在严格模式下执行;
function doSomething(){
    "use strict"
    //函数体
}
5)语句, 分号; 结尾,如果省略,由解析器确定语句结尾。推荐代码块用{}包含,及时只有一条语句。
6)定义变脸,用var
如果在 函数体内定义变量时,省略var,会创建一个全局变量

2、数据类型
1)typeof 操作符,对一个值使用typeof 操作符肯恩返回下列某个字符串,:
“undefined”-- 如果这个值未定义
“boolean”-- 如果这个值是布尔值: true false
“string”-- 如果这个值是字符串
“number”-- 如果这个值是数值
“object”-- 如果这个值是对象或者null
“function”-- 如果这个值是函数。
注:函数在ECMAScript  中是对象,然后,函数确实有一些特殊的属性,因此通过typeof 操作符来区分函数和其他对象时有必要的。
Undefined 类型只有一个值:undefined,Null类型也只有一个值,是null  。从逻辑角度看,null值表示一个空对象指针,如果用typeof 检测null会返回"object"。实际上,undefined是派生于null的。
2)
于JS保存熟知的方式,可以保存正零(+0)和负零(-0);
在进行数值计算时,所有以八进制(0)和十六进制(0x)表示的数值最终豆浆杯转换成十进制数值。
保存浮点数的内存空间是证书的两倍,ECMAScript 会不失时机将浮点数转换成整数值。
舍入误差。
NaN,即费数值(Not a Number)是一个特殊的数值,表示本来要返回数值的操作数未返回数值的情况。(NaN与任何值都不想等,包括NaN本身。isNAN()函数接受一个参数,确定是否不是数值或者不能转换为数值)
数制转换函数:将非数值转换为数值
Number()  parseInt() parseFloat()  有区别

3)字符串
与PHP中双引号和单引号会影响对字符串的解释方式不同,EMCAScript中,这两种无什么区别。
\ xnn :以十六进制代码nn表示的一个字符(其中n为0~F)。例如\x41 表示“A”。
\ xnnnn :以十六进制代码nnnn表示的一个Unicode字符。
JS中字符串是不可变的,字符串一旦创建,要改变某个变量存的字符串,就先销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
转换成字符串:toString()方法,几乎每个值都有,然后要把某个值转换为字符串,可以用加号操作符把它与一个字符串("")加在一起。

4)object类型,ECMAScript中的对象其实就是一组数据和功能的集合。
从技术角度讲ECMA-262中对象的行为并不一定适用于JS中的其他对象。因为浏览器环境中的对象,比如BOM和DOM中的对象,都属于宿主对象,因为它们是有宿主实现提供和定义的。因为宿主对象可能会也可能不会集成Object。

3、操作符
1)
一元操作符、
位操作符(位操作符用于最基本的层次上,ECMAScript中所有数值都以IEEE-754 64位格式存储,但是位操作符不是直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位)、
布尔操作符(逻辑)、
乘性操作符、
加性操作符、
关系操作符(<=  >=)、
相等操作符(==、===、!= 、!==)、
条件操作符、
复制操作符、
逗号操作符(,):可以在一条语句中执行多个操作,复制时总返回表达式最后一项

4、语句
1)if else、do-while、while、for 和C语言中都相似
2) for-in语句(这个和python中个for有些相似):
for-in是一种精准的迭代语句,可以用来枚举对象的属性
 for (property in expression) statement
示例:
<!DOCTYPE html>
<html>
<head>
    <title>For-In Statement Example 1</title>
</head>
<body>
    <script type="text/javascript">
        for (var propName in window) {
             document.write(propName);
             document.write("<br />");
        }
    </script>
</body>
</html>
注意:ECMAScript 对象的属性没有顺序。因此,通过for-in 循环输出的顺序是不可预测的,可能会因浏览器而异。但是如果表示要迭代的对象的变量值是null或undefined ,for-in语句会抛出错误,ECMAScript 5更正了这一行为,改成只是不执行循环体。因此,有必要使用for-in之前,先确认该 对象的值是不是null或者undefined。
Safari3 以前版本的for-in语句有一个bug,会导致某些属性被返回2次。
3) label语句:添加标签,一边将来使用,可由break或continue语句引用。加标签的语句一般与for语句等循环语句配合使用。

例子:
<!DOCTYPE html>
<html>
<head>
    <title>Break Statement Example 2</title>
    <script type="text/javascript">
        var num = 0;
       
         outermost:
        for (var i=0; i < 10; i++) {
             for (var j=0; j < 10; j++) {
                if (i == 5 && j == 5) {
                     break outermost;
                }
                num++;
            }
        }
       
        alert(num);     //55
    </script>
</head>
<body>
</body>
</html>
学过C的可能有些不理解,事实上这样写语法能正确执行。
4)with语句
将代码的左右与设置到一个特定的许对象中。
with (expression) statement;
定义with语句的目的主要是为了简化多次编写同一个对象的工作,
var qs = location.search.substring(1);
var hostName = location.hostname;
var url= location.href;


<!DOCTYPE html>
<html>
<head>
    <title>With Statement Example 1</title>
    <script type="text/javascript">
   
        with(location){
            var qs = search.substring(1);
            var hostName = hostname;      //unavailable when viewing from a local file
            var url = href;
        }
        alert(qs);
        alert(hostName);
        alert(url);
    </script>
</head>
<body>
</body>
</html>
注意
严格模式下不允许使用with 语句,否则视为语法错误。
由于大量使用with会导致性能下降,同时也给调试代码造成困难。

5)switch
JS的switch语句有自己的特色,
首先,可以在switch语句中使用任何数据类型(很多其他语言中只能使用数值)。
其次,每个case的值不一定是常量,也可以是变量,真实值表达式。
switch语句在比较值时使用的是全等操作符,因此不会发生类型转换

5、函数
1)用function关键字来声明
2)ECMAScript 的函数在定义是 不必指定是否返回值。实际上,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值。return语句也可以不带有任何返回值,将返回undefined.
推荐的做法是:要么让函数始终都返回一个值,要么永远都不要返回值。否则,如果函数有时候返回,有时候不返回,会给调试代码带来不便。
3)严格模式对函数的限制
不要把函数或者参数命名为eval 或 arguments。
不要出现两个命名参数同名的情况
4)理解参数
ECMAScript  函数不介意传递进来多少参数,在不在乎什么数据类型。因为ECMAScript 中的参数在内部使用一个数组来表示的,在函数体内可通过arguments对象来访问这个数组。arguments[0]是第一个元素arguments.length属性,可以获知有多少个参数传递给了函数。对于arguments的行为,还有一点,就是它的值永远与对应命名参数的值同步。
    <script type="text/javascript">
        function doAdd(num1, num2) {
            if(arguments.length == 1) {
                alert(num1 + 10);
            } else if (arguments.length == 2) {
                alert(arguments[0] + num2);
            }
        }
       
        doAdd(10);        //20
        doAdd(30, 20);    //50
    </script>

    <script type="text/javascript">
        function doAdd(num1, num2) {

                arguments[1] = 10;

            alert(arguments[0] + num2);
        }
        doAdd(10, 20);        //20
        doAdd(30, 20);    //40
    </script>


注意:ECMAScript 中的所有参数传递的都是值,不可能通过引用传递参数。
函数没有重载,如果出现两个名字相同的函数,则该名字只属于后定义的函数。
示例:
    <script type="text/javascript">
        function addSomeNumber(num){
            return num + 100;
        }
       
        function addSomeNumber(num) {
            return num + 200;
        }
       
        var result = addSomeNumber(100);    //300
        alert(result);
    </script>

© 著作权归作者所有

slyso
粉丝 29
博文 28
码字总数 52229
作品 0
美国
个人站长
私信 提问
读《JavaScript高级程序设计》

1、JavaScript学习笔记1:JavaScript学前介绍 http://my.oschina.net/bluefly/blog/478575 2、JavaScript学习笔记2:JavaScript基本概念 http://my.oschina.net/bluefly/blog/484445......

slyso
2015/07/14
182
0
分享51本关于JavaScript方面的学习书籍(免费下载)

分享51本关于JavaScript方面的学习书籍(免费下载) 1、JavaScript面向对象15分钟教程 2、原型、作用域、闭包的完整解释 3、Javascript面向对象特性实现(封装、继承、接口) 4、JavaScript面向...

邓剑彬
2012/12/02
1K
12
前端学习之路(从入门到入坑...)

学习前端两年多了,拿了阿里巴巴实现offer,想结合个人经历总结的前端入门方法,总结从零基础到具备前端基本技能的道路、学习方法、资料。由于能力有限,不能保证面面俱到,只是作为入门参考...

阿小庆
2018/06/14
0
0
JavaScript 预解释分析

#预解释 1. JS基础知识 1.1 先介绍js的基本数据类型 基本数据类型 --- 值操作 有number、string、boolean、null、undefined 引用数据类型 ---- 引用地址 object、array、Date 1.2 执行环境 ...

dafeige
2018/12/18
0
0
day03_js学习笔记_03_js的事件、js的BOM、js的DOM

day03js学习笔记03_js的事件、js的BOM、js的DOM ============================================================================= 涉及到的知识点有: ==================================......

黑泽明军
2018/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
今天
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
今天
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
今天
4
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部