语法

(1)到现在为止,大多数浏览器也还是支持到ECMAScript 第三版的标准。 核心概念就是一个语言的基本工作原理,涉及语法,操作符,数据类型。

(2)javascript的一切--变量,函数名,操作符都区分大小写。

按照惯例,标识符采用驼峰大小写习惯

firstSecond

myCar

doSomethingImportant

变量

(1)ECMAScript变量是松散类型的,可以保存任何类型的数据,而且它不像C#的 var 类型,初始化之后类型,随着变量值的修改,类型也会修改。

var message = “hi”; //这里一开始保存了一个字符串类型,值是hi。

message = 100;  //现在保存了一个整数类型,值是100.

(2)使用var操作符定义的变量将成为该变量的作用域中的局部变量,如果在函数中使用var定义一个变量,那么这个变量在函数退出后将会被销毁

function test() 

{        

    var message = "hi"; //局部变量

}

test();

alert(message); //undefined  变量message在函数中使用var定义,当函数被调用时,就会创建该变量并为其赋值,出了函数作用范围,变量立即被销魂, 因此下一行代码会导致错误。

 

//下面的例子省略了var操作符,从而创建一个全局变量。

function test(){

    message = "hi"; //全局变量

}

test();

alert(message); //“hi” 这里省略了var操作符,因而message就成了全局变量,只要调用过一次test()函数,这个变量就有了定义, 就可以在函数外部的任何地方被访问到。 但是这样的做法不推荐,在局部作用域定义的全局变量很难维护。 

 

数据类型

ECMAScript有5种简单数据类型(或基本数据类型): Undefined, Null, Boolean, Number, String 还有一种复杂数据类型Object,Object本质上市由一组无序的名值对组成。 (为什么不将Null类型和Object类型归为一类?这样概念会清晰一点吧?)

typeof操作符 负责检测给定变量的数据类型,对一个值使用typeof操作符肯呢过返回下列某个字符串:

“undefined” --如果这个值没有定义。

“boolean”--如果这个值是布尔值

“string”--如果这个值是字符串

“number”--如果这个值是数值

“object”--如果这个值是对象或null

“function”--如果这个值是函数

Undefined类型

var message; //Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个量的值就是undefined,

alert(message == undefined); //true

 

 

var message = undefined; //使用undefined值显式初始化了变量message, ECMA-262 第三版才引入这个值,为了正式区分空对象指针和未经初始化的变量

alter(message == undefined);//true 

要注意包含undefined值的变量和尚未定义的变量还是不一样的,看下面例子:

var message; //这个变量声明之后默认取得了undefined值

 

//下面这个变量没有声明

// var age

 

alert(message); //"undefined"

alert(age);     //产生错误

对于没有声明过的变量,只能执行一项操作,即使用typeof操作符检测其数据类型。

但是令人困惑的是, 对未初始化的变量和未声明的变量执行typeof操作符都同样返回undefined值。 看下面的例子

var message; //这个变量声明之后默认取得了undefined值

 

//下面这个变量并没有声明

// var age

 

alert(typeof message); //"undefined"

alert(typeof age );    //"undefined"

即使未初始化的变量会自动被赋予undefined值,但是显示地初始化变量依然是明智的选择, 如果这样,那么当typeof操作符返回undefined值的时候,我们就知道被检测的变量还没有被声明, 而不是尚未被初始化。

Null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看, null值表示一个空对象指针,而这也正是使用typeof操作符检测null值会返回"object”的原因

var car = null;

alert(typeof car); // "object"

如果定义的变量准备将来用于保存对象,那么最好将该变量初始化为null,而不是其他值,这样,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。

Boolean类型

Boolean类型只有两个字面值:true 和 false。 这两个值与数字值不是一回事,因此true不一定等于1, false不一定等于0.  虽然Boolean类型的字面值只有两个,但是ECMAScript中所有类型的值都有与这两个Boolean值等价的值。 要将一个值转换为其对应的Boolean值, 可以调用转型函数Boolean(), 如下例所示:

var message = “Hello world!”;

var messageAsBoolean = Boolean(message);

下面给出各种数据类型及其对应的转换规则。 理解这些规则对理解流控制语句(if)自动执行相应的Boolean转换非常重要。

数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined n/a undefined

Number类型

ECMAScript中最令人关注的数据类型, 不用记什么IEEE754格式,这些标准真多,下面只是以举例子的形式理解

十进制整数可以像下面这样直接在代码中输入:

var intNum = 55;  // 整数

八进制整数的第一位 必须是零(0),然后是八进制数字序列(0-7)。如果字面值中的数值超出范围,那么前导零将被忽略, 后面的数值被当做十进制数值解析。

var octalNum1 = 070;  //八进制的56

var octalNum2 = 079;  //无效的八进制数值--解析为79

var octalNum3 = 08;   //无效的八进制数值--解析为8

十六进制字面值的前两位必须是0x, 后跟任何十六进制数字(0-9 及A-F), 其中,A-F可以大写,也可以小写。 如下例所示:

var hexNum1 = 0xA;   //十六进制的10

var hexNum2 = ox1f   //十六进制的31

进行运算时,八进制和十六进制表示的数值最终都将转换成十进制数值。

浮点值,必须包含一个小数点,而且小数点后面必须至少有一位数字。

var floatNum1= 1.1;

var floatNum2 = 0.1;

var floatNum3 = .1  //有效,但不推荐

var floatNum4 = 1.; //小数点后面没有数字----解析为1

var floatNum5 = 10.0;  //整数----解析为10

对于极大极小的数值,可以用e表示法表示的浮点表示

var floatNum = 3.125e7 //等于31250000

浮点数值的最高精度是17位小数,但是进行算术运算的时候其精度远不如整数, 如0.1+0.2 结果不是0.3而是0.3000000000000004.

NaN 即(Not a Number)是一个特殊的数值, 这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。
NaN的特点,首先涉及NaN的操作都会返回NaN, 例如NaN/10, 其次NaN与任何值都不相等,包括NaN本身。

数值转换

有三个函数可以把非数值转换成为数值: Number(), parseInt()  和parseFloat()。

Number()可以用于任何数据类型,而另外两个则用于把字符串转换成数值

Number()函数的转换规则如下.

  • 如果是Boolean值, true和false将分别转换为1和0;
  • 如果是数字值,只是简单的传入和返回
  • 如果是null,  返回0;
  • 如果是unefined, 换回NaN;
  • 如果是字符串, 遵循下列规则:
    • 如果字符串中只包含数字,则将其转换为十进制数值, 即“1”会变为1, “123”会变为123,”011”会变为11(前导零被忽略);
    • 如果字符串中包含有效的浮点格式,如“1.1”, 则将其转换为对应的浮点数值(同样,也会忽略前导零);
    • 如果字符串中包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值;
    • 如果字符串是空的(不包含任何字符),则将其转换为0;
    • 如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
  • 如果是对象,则调用对象的valueOf()方法, 然后依照前面的规则转换返回的值,如果转换的结果是NaN, 则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

parseInt()函数的转换规则

他会忽略字符串前面的空格,知道找到一个非空格字符,如果第一个字符不是数字字符或者负号, parseInt()就会返回NaN, 也就是说, 用parseInt转换空字符会返回NaN,(相对于Number()对空字符返回0)。 如果字符串以“0x”开头且跟数字字符,就会将其当做一个十六进制整数,如果字符串以“0”开头且后跟数字字符, 则会将其当做一个八进制数来解析。

下面是例子:

var num1 = parseInt(“1234blue”);  //1234

var num2 = parseInt(“”); //NaN

var num3 = parseInt(“0xA”);  //10 (十六进制数)

var num4 = parseInt(22.5);   //22

var num5 = parseInt(“070”);   //56 (八进制数)

var num6 = parseInt(“70”);    //70(十进制数)

var num7 = parseInt(“0xf”);   //15(十六进制数)

如果要知道解析的值是十六进制格式的字符串,那么指定基数16作为第二个参数,可以保证得到正确的结果,例如:

var num = parseInt(“0xAF”, 16);    //175

如果指定了16作为第二个参数,字符串可以不带前面的“0x“,如下所示:

var num1 = parseInt(“AF”, 16);    //175  第二个参数16明确告诉parseInt()要解析一个十六进制格式的字符串。

var num2 = parseInt(“AF”);         //NaN

而指定基数会影响到转换的输出结果。 例如

var num1 = parseInt(“10”, 2);   //2 (按二进制解析)

var num2 = parseInt(“10”, 8);   //8 (按八进制解析)

var num3 = parseInt(“10”,10);   //10 (按十进制解析)

var num4 = parseInt(“10”,16);   //16 (按十六进制解析)

ParseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析奥字符串末尾, 或者解析到遇见一个无效的浮点数字符为止。 字符串中的第一个小数点事有效的,第二个小数点是无效的,它后面的字符串将被忽略。 “22.34.5”将会被转换为22.34.

第二点是parseFloat始终会忽略前导零, parseFloat只解析十进制值,因此没有第二个指定参数作为基数的用法。

var num1 = parseFloat(“1234blue”);  //1234 (整数)

var num2 = parseFloat(“0xA”);  //0 十六进制数始终会转换为零

var num3 = parseFloat(“22.5”);  //22.5

var num4 = parseFloat(“22.34.5”); //22.34

var num5 = parseFloat(“0908.5”);  //908.5

var num6 = parseFloat(“3.125e7”); //31250000

String类型

string类型用于表示由0个或多个16位Unicode字符组成的字符序列,即字符串。 字符串可以由双引号(“)或单引号(‘)表示,

var firstName = “Nicholas”;

var lastName = ‘Zakas’;

以上两种写法完全相同,

要把一个值转换为一个字符串有两种方式,第一种使用几乎每个值都有的toString()方法,这个方法要做的就是返回相应值得字符串表现。

var age = 11;

var ageAsString  = age.toString(); //字符串”11”

var found = true;

var foundAsString = found.toString();  //字符串”true”

数值,布尔值,对象,和字符串值(每个字符串也都有一个toString()方法, 该方法返回字符串的一个副本)都有一个toString方法,null 和undefined值没有这个方法。

在不知道要转换的值是不是null或undefined的情况下,可以使用转型函数String(),将任何类型的值转换为字符串,String()函数遵循下列规则:

  • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
  • 如值是null, 则返回“null”;
  • 如果值是undefined,则返回“undefined”。

下面看几个列子;

var value1 = 10;

var value2 = true;

var value3 = null;

var value4 ;

alert(String(value1)) ; //”10”

alert(String(value2)); //”true”

alert(String(value3)); //”null”

alert(String(value4")); //”undefined”

Object类型

ECMAScript中的对象就是一组数据和功能的集合。 对象可以通过执行new操作符后跟要创建的对像类型名称来创建。 而创建Object类型的实例并为其添加属性和(或)方法,就可以创建自定义对象。 如下:

var o = new Object();

仅仅创建Object的实例并没有什么用处, 关键是要理解一个重要的思想:即在ECMAScript中,Object类型是它所有实例的基础。 也就是说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。

Object每个实例都具有下列属性和方法:

  • constructor--保存着用于创建当前对象的函数。 对于前面的例子而言构造函数就是Object();
  • hasOwnProperty(propertyName)--用于检查给定的属性在当前对象实例中是否存在。 其中,作为参数的属性名(propertyName)必须以字符串形式指定。(例如: o.hasOwnProperty(“name”))
  • isPrototypeOf(object) --用于检查传入的对象是否是另一个对象的原型
  • propertyIsEnumerable(propertyName) --用于检查给定的属性是否能够使用for-in语句(本章后面将会讨论)来枚举。 与hasOwnProperty()方法一样,作为参数名的属性名必须以字符串形式指定。
  • toString()--返回对象的字符串表示;
  • valueOf()--返回对象的字符串, 数值或布尔值表示。 通常与toString()方法的返回值相同。

Javascript类型的内容到此为止

javascript 核心概念(1)-数据类型的更多相关文章

  1. 《JavaScript核心概念》基础部分重点摘录

    注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...

  2. javascript核心概念之——数组

    在javascript中数组就是一个可以存放任何类型的集合.存储在数组中的值用逗号分隔 var arr = ["hello",7,null,undifined,obj,undifi ...

  3. javascript核心概念——new

    如果完全没有编程经验的朋友看到这个词会想到什么? 上过幼儿园的都知道new表示 "新的" 的意思. var a = new Date() 按照字面的意思表示什么? 把一个新的dat ...

  4. 掌握 javascript 核心概念 最好的教程 系列 之一

    链接 新链接 函数优先, 在扫描创建变量阶段, 会先收集函数, 如果前面有同名函数或者变量, 这个新函数会覆盖前面同名的: 而如果这时候是变量, 则不能去覆盖前面已有的值. function test ...

  5. 学习 JavaScript (三)核心概念:语法、变量、数据类型

    JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,这篇文章主要讲解的是前面三个,后面三个下一篇文章再讲解. 01 语法 熟悉 JavaScript 历史的人应该都知道 ...

  6. 学习 JavaScript (四)核心概念:操作符

    JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,前面三个上一篇文章已经讲解完了.后面三个内容超级多,这篇文章主要讲解的是操作符. 操作符 什么叫做操作符? 这是一种 ...

  7. Javascript本质第一篇:核心概念

    很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...

  8. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  9. JavaScript的概念,引入,基本数据类型

    08.05自我总结 JavaScript 一.概念 JavaScript(下文我们会用简称JS来代替)是脚本编程语言,JS语言开发的文件是以.js为后缀,通过在html文件中引入该js文件来控制htm ...

随机推荐

  1. POJ-2135-Farm Tour(最大费用最小流)模板

    Farm Tour POJ - 2135 When FJ's friends visit him on the farm, he likes to show them around. His farm ...

  2. Sessions共享技术设计

    概述 分布式session是实现分布式部署的前提, 当前项目由于历史原因未实现分布式session, 但是由于在kubernets中部署多个pod时, 负载均衡的调用链太长, 导致会话不能保持, 所以 ...

  3. git 的简单使用(2)

    一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: $ rm test.txt 你可以使用 git rm test.txt来删除 然后用git commit -m " ...

  4. scrapy框架的日志等级和请求传参, 优化效率

    目录 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 请求传参 如何提高scripy的爬取效率 scrapy框架的日志等级和请求传参, 优化效率 Scrapy的日志等级 在使 ...

  5. PAT 1097. Deduplication on a Linked List (链表)

    Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...

  6. 学习记录--如何将exec执行结果放入变量中?

    declare @num int, ) set @sqls='select @a=count(*) from tb ' exec sp_executesql @sqls,N'@a int output ...

  7. ISNUMERIC()检测是否为数字

    ISNUMERIC ( expression )当输入表达式得数为一个有效的整数.浮点数.money 或 decimal 类型,那么 ISNUMERIC 返回 1:否则返回 0.返回值为 1 确保可以 ...

  8. openstack部署工具简介

    个人使用方面DevStack无疑,在可预见的未来时间内,DevStack仍将是众多开发者们的首选安装方式或工具.该方式主要是通过配置参数,执行shell脚本来安装一个OpenStack的开发环境.Gi ...

  9. 同开三本DJANGO,需要提升一下本职工作的能力啦

    慢慢将一些概念固化到基因内,才有可能和SPRING MVC,MEAN之类的好好作比较吧. 全都是基于1.8版本的教材,爽!!!

  10. POJ——T 1160 Post Office

    http://poj.org/problem?id=1160 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20218   ...