JavaScript的类型、值和变量的总结

  前言:JavaScript的数据类型分为两类:原始类型和对象类型。5种原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)。对象是属性的集合,每个属性都由“名/值对”(值可以是原始值、也可以是对象)构成。三个比较特殊的对象:全局对象、数组、函数。JavaScript语言核心还定义了三种有用的类:日期(Date)类、正则(RegExp)类、错误(Error)类。

  2.1 数字

  JavaScript中不区分整数值和浮点数值。JavaScript可以识别十进制整型直接量(所谓直接量,就是程序中直接使用的数据值),和16进制值(以0x或0X为前缀,那个是数字0不是字母o。想想如果是字母o的话,那一个十六进制值不成了一个标识符了嘛)。尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以采用八进制形式表示整数(以数字0为前缀),笔者在自己电脑上的IE、Chrome、FF这三种浏览器中使用八进制给一个变量赋值也都没问题。不过在ECMAScript6的严格模式下,八进制直接量是明令禁止的。

  浮点型直接量有两种写法。①传统的实数写法:有整数部分、小数点和小数部分组成;②指数计数法:即在实数后跟字母e或E,后面跟正负号,其后再跟一个整型的指数。

   2.1.1 算术运算的溢出

  JavaScript中算术运算在溢出(overflow)、下溢(underflow)或被0整除时不会报错。

  溢出:当运算结果超出了JavaScript所能表示的数字上限,结果为正无穷大Infinity或负无穷大-Infinity。无穷大值得行为特性也符合现实:基于它们的加、减、乘和除运算结果还是无穷大值(当然保留它们的正负号);下溢:当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的情形。这种情况下,将会返回0。当一个负数发生下溢时返回特殊值“负零”。负零和整零基本是相等的(甚至可以使用严格相等===来测试),除了作为除数之外:

  

var zero = 0;    //正零值
var negz = -0;    //负零值
zero === negz    //表达式返回值为true
1/zero === 1/negz    //表达式返回值false,等价于判断正无穷大和负无穷大是否严格相等

  

  被0整除会返回正无穷大或者负无穷大值。但0除以0会返回NaN(JavaScript预定义对象Number的NaN属性的值)。返回NaN的有四种情况:①0除以0②无穷大除以无穷大③给任意负数作开方运算④算术运算符与不是数字或无法转换为数字的操作数一起使用时。

  NaN值有一点特殊:它和任何值都不相等,包括自身。判断一个变量x是否为NaN的两种方法:①使用函数isNaN()②是使用x != x 判断,当且仅当x为NaN时,表达式结果才为true。JavaScript中还有一个类似的函数isFinite(),在参数不是NaN、Infinity或-Infinity的时候返回true。

  2.1.2 二进制浮点数和四舍五入错误

  实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数。也就是说,在JavaScript中使用实数的时候,常常只是一个真实值的一个近似表示。JavaScript采用了IEEE-754浮点数表示法,这是一种二进制表示法,可以精确的表示如1/2、1/8和1/1024、这样的分数,但是十进制分数1/10、1/10等并不能精确的表示。例如:

  

var x = 0.3 -0.2;    //x=0.09999999999999998
var y = 0.2 - 0.1;   // y=0.1
x == y              //false
x == 0.1            //false
y == 0.1            //true
0.1 == 0.1         //true
var z = x + y;     //z=0.19999999999999998

  2.2 文本

  2.2.1 字符串、字符集

  字符串(string)是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。字符串的长度(length)是其所含16位值得个数。JavaScript通过字符串类型来表示文本。注意:JavaScript中并没有表示单个字符的“字符型”。要表示一个16位值,只需将其赋值给字符串变量即可。

  JavaScript采用UTF-16编码的Unicode字符集,JavaScript字符串是由一组无符号的16位值组成的序列。那些不能表示为16位的Unicode字符则遵循UTF-16编码规则——用两个16位值组成一个序列(或称作“代理项对”)表示。这意味着一个长度为2的JavaScript字符串有可能表示一个Unicode字符。注意:JavaScript定义的各式字符串的操作方法均作用于16位值,而非字符,且不会对代理项对做单独处理。书看到这里,又结合http://www.alloyteam.com/2013/12/js-calculate-the-number-of-bytes-occupied-by-a-string/上面所述,终于对Unicode字符集、UTF-8、UTF-16稍有理解。

  字符串的定界符可以是单引号或者双引号。这两种形式的定界符可以嵌套,但是不能多层嵌套(比如,双引号可以包含单引号,这时单引号中不能再包含双引号了)。正如上篇所说,一个字符串值可以拆分为数行,每行必须以反斜线(\)结束,这时反斜线和行结束符都不算是字符串内容,即字符串本身并非是多行,只是写成了多行的形式。

  注意:①在JavaScript中字符串是固定不变的(除非重新赋值),类似replace()和toUpperCase()的方法都返回新字符串,原字符串本身并没有变化;②字符串可以当做只读数组,除了使用charAt()方法来查询一个单一字符,也可以使用方括号的方式来访问字符串中的单个字符(16位值),例如:

    s = "hello, world";

    s[0]   //=>"h"

  2.2.2 转义字符

转义字符 含义  
\o NUL字符(\u0000)
\b 退格符(\u0008)
\t 水平制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\" 双引号(\u0022)
\‘ 撇号或单引号(\u0027)
\\ 反斜线(\u005C)
\xXX 由两位十六进制数XX指定的Latin-1字符
\uXXXX 由4位十六进制数XXXX指定的Unicode字符

注意:如果"\"字符位于没有在表中列出的字符前,则忽略"\"。比如,"\#"和"#"等价。别忘了反斜线还有一个作用就是多行字符串中每行结束处使用反斜线。

  2.3 布尔值

  在JavaScript中的值都可以转换为布尔值。其中,null、undefined、0、-0、NaN、""(空字符串),这6个值会被转换成false,false和这六个值有时称做“假值”;其他所有值,包括对象(数组)都会转换成true,true和这些值相应的被称做“真值”。注意:布尔值包含toString()方法,因此可以使用这个方法将字符串转换成“true”或“false”,但它并不包含其他有用的方法。

  null、undefined 以及对象的内容之后再说。

时间: 2024-08-07 17:01:56

JavaScript的类型、值和变量的总结的相关文章

JS学习第五天----类型,值,和变量

类型,值,和变量 前言:计算机程序的运行需要对值(value)比如数字3.14或文本"hello,world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是支持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值"保存"到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是变成语句的另一个基本特征. 前言:JavaScript的数据类型分为两类:原始

第3章 类型,值和变量

能够表示并操作的值的类型称做数据类型(type) JS中包含 原始类型(primitive type) 和 对象类型(object type) 原始类型包括:数字,字符串,布尔值,NULL,undefined 对象(object)是属性(property)的集合,每个属性都是键值对(key/value)构成. 数组(array)是一种特殊的对象,普通的对象是"命名值"的无序集合,而数组表示带编号的值的有序集合 函数(function)也是一种特殊的对象,函数是具有与它相关联的可执行代码

你根本不会Javascript(1)——类型、值和变量

文原载于szhshp.org/tech/2017/02/18/JavaSprite.html 转载请注明 类型.值和变量 包装对象和原始值 ECMAScript 有 5 种原始类型(primitive type) Undefined Null Boolean Number String 基本类型(null, undefined, bool, number, string)应该是值类型,没有属性和方法. 内置对象 Javascript有一系列内置对象来创建语言的基本功能,具体有如下几种 Boole

JavaScript基础——类型、值和变量

对象和数组属于可变类型:字符串是不可变的:可以访问字符串任意位置的文本,但JavaScript并未提供修改一直字符串的文本内容的方法. JavaScript变量是无类型的(untyped),变量可以被赋予任何类型的值,同样一个变量也可以重新赋予不同类型的值.使用var关键字来声明(declare)变量.JavaScript采用词法作用域(lexical scoping).不在任何函数内声明的变量称为全局变量(global variable),它在JavaScript程序中的任何地方都是可见的.

JavaScript权威指南第03章 类型、值和变量

类型.值和变量 数据类型分类: 原始类型(primitive type):数字 字符串 布尔值 null undefined 对象类型(object type): 对象是属性的集合,每个属性都由"名/值"对构成. javascript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收. 3.1数字 javascript不区分浮点和整型,所有的数字都是按照浮点型处理. 3.1.1整型直接量 3.1.2浮点型直接量 3.1.3算数运算 3.1.4二进制浮点数和四舍五入错误 当进行小数进

第三章:Javascript类型、值和变量。

计算机程序的运行需要对值(value)比如数字3.14或者文本"hello world"进行操作,在编程语言中,能够表示并操作的值的类型叫做数据类型(type),编程语言最基本的特性就是主持多种数据类型.当程序需要将值保持起来以备将来使用时,便将其赋值给(将值“保存”到)一个变量(variable).变量是一个值的符号名称,可以通过名称获得对值的引用.变量的工作机制是编程语言的令一个基本特性.本章将参照上节帮助理解本章内容,后续将更深入的讲解. javascript的数据分为两类:原始

JavaScript权威指南第03章 类型、值和变量(2)

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

JavaScript的类型、值和变量

计算机程序的运行需要对值进行操作,再变成语言中,能够表示并操作的值得类型称为数据类型.变量用来将值存储起来,变量是值得符号名称. 一.数据类型 JavaScript的数据类型可以分为两类,原生类型和对象类型,JavaScript的原始类型包括数字.字符串和布尔值,JavaScript还有两个特殊的原始值null(空)和undefined(未定义),它们不是数字.字符串和布尔值对象类型包含普通对象.数组.函数.日期.正则.错误对象. JavaScript的类型也可以按有无方法分,除了null和un

JavaScript之我学一变量类型

本文是网易云课堂金旭亮老师的课程笔记,记录下来,以供备忘. 变量类型  只有6种 : 四种原始数据类型boolean , number, string , undefine, 其他object,function是对象 typeof,instanceof   直接看实例: var obj = null; console.info(typeof obj); //Object var arr = []; console.info(arr instanceof Object); //true conso