网站开发需求式样书,网络公司注册多少钱,对网站建设的具体想法,朝阳网站建设 国展1、类型
我们这样来定义类型#xff1a;类型是值的内部特征#xff0c;它定义了值的行为#xff0c;以使其区别于其他值
1.1、内置类型
JS有其中内置类型#xff1a;null、undefined、boolean、number、string、object、symbol#xff08;ES6新增#xff09;#xff…1、类型
我们这样来定义类型类型是值的内部特征它定义了值的行为以使其区别于其他值
1.1、内置类型
JS有其中内置类型null、undefined、boolean、number、string、object、symbolES6新增除了对象之外其余统称为“基本类型”
可以使用typeof运算符来查看值的类型但是null是一个例外
typeof null object // true在函数对象中length属性是其声明的参数的个数数组也是对象是object的一个“子类型”
function a(b,c){...
}
a.length // 21.2、值和类型
JS中的变量是没有类型的只有值才有。变量可以随时持有任何类型的值
typeof运算符总是会返回一个字符串
已在作用域中声明但还没有赋值的变量是undefined。相反还没有在作用域中声明过的变量是undeclared的
var a ;
a // undefined
b // ReferenceError: b is not defined对于这类情况的处理让人抓狂如果对于b可以返回undeclared的话情况会好很多
1.3、总结
JS有 七 种 内 置 类 型null、undefined、boolean、number、string、object 和symbol可以使用 typeof 运算符来查看。
变量没有类型但它们持有的值有类型。类型定义了值的行为特征。
很 多 开 发 人 员 将 undefined 和 undeclared 混 为 一 谈 但 在JS中 它 们 是 两 码 事。undefined 是值的一种。undeclared 则表示变量还没有被声明过。遗憾的是JavaScript 却将它们混为一谈在我们试图访问 “undeclared” 变量时这样报错ReferenceError: a is not defined 并 且 typeof 对 undefined 和 undeclared 变 量 都 返 回undefined。
然而通过 typeof 的安全防范机制阻止报错来检查 undeclared 变量有时是个不错的办法。
2、值
2.1、数组
在JS中数组可以容纳任何类型的值可以是字符串、数组、对象甚至是其他数组
使用delete运算符可以将单元从数组中删除但是删除后数组的length属性并不会发生变化
var a [ ];
a[0] 1;
a[foobar] 2;
a.length; // 1
a[foobar]; // 2
a.foobar; // 2数组通过数字进行索引但是有趣的是他们也是对象所以他们也可以包含字符串键值和属性
2.2、类数组
可以使用数组工具函数indexOf…、concat…、forEach…将类数组转换位真正的数组也可以使用Array.from
const arrayLike { 0: a, 1: b, 2: c, length: 3 };
const arr Array.from(arrayLike);
console.log(arr); // [a, b, c]const arrayLike { 0: a, 1: b, 2: c, length: 3 };
const arr Array.prototype.slice.call(arrayLike);
console.log(arr); // [a, b, c]2.3、字符串
字符串与数组类似他们都是类数组都有length属性以及indexOf…和concat…方法但是在JS中字符串是不可变的而数组是可变的在进行字符串反转时我们可以如下来做
var c a.split() // 将a的值转换为字符数组.reverse() // 将数组中的字符进行倒转.join() // 将字符串中的字符拼接回字符串2.4、数字
JS只有一种数值类型包括“整数”和带小数的十进制数
JS中的数字类型是基于IEEE754标准来实现的该标准通常也被称为“浮点数”JS使用的是“双精度”格式64位二进制
特别大和特别小的数字默认用指数格式显示与toExponential函数用于将数字转换为指数形式的字符串的输出结果一致
const num 123.456789;
console.log(num.toExponential()); // 输出1.23456789e2
console.log(num.toExponential(2)); // 输出1.23e2
console.log(num.toExponential(6)); // 输出1.234568e2tofixed…方法可指定小数部分的显示位数
var a 42.59;
a.toFixed( 0 ); // 43
a.toFixed( 1 ); // 42.6
a.toFixed( 2 ); // 42.59
a.toFixed( 3 ); // 42.590
a.toFixed( 4 ); // 42.5900toPrecision(…) 方法用来指定有效数位的显示位数
var a 42.59;
a.toPrecision( 1 ); // 4e1
a.toPrecision( 2 ); // 43
a.toPrecision( 3 ); // 42.6
a.toPrecision( 4 ); // 42.59
a.toPrecision( 5 ); // 42.590
a.toPrecision( 6 ); // 42.5900上边的方法不仅适用于数字变量也适用于数字字面量。不过对于.运算符需要给予特别注意因为它是一个有效数字字符会被优先识别为数字字面量的一部分然后才是对象属性访问运算符
// 无效语法
42.toFixed( 3 ); // SyntaxError
// 下面的语法都有效
(42).toFixed( 3 ); // 42.000
0.42.toFixed( 3 ); // 0.420
42..toFixed( 3 ); // 42.000在JS中0.10.2!0.3因为他是浮点数我们可以设置一个误差范围值该值定义在Number.EPSILON中可以使用它来比较两个数字是否相等
function numbersCloseEnoughToEqual(n1,n2) {return Math.abs( n1 - n2 ) Number.EPSILON;
}
var a 0.1 0.2;
var b 0.3;
numbersCloseEnoughToEqual( a, b ); // true
numbersCloseEnoughToEqual( 0.0000001, 0.0000002 ); // false如果要检测一个值是否为整数可以使用ES6中的Number.isInteger…方法
Number.isInteger( 42 ); // true
Number.isInteger( 42.000 ); // true
Number.isInteger( 42.3 ); // false2.5、特殊的值
null是一个特殊关键字不是标识符不能将其当做变量来使用尽管 null 可以被赋值给变量但它本身并不是变量也不应该被当做变量来使用。当我们需要表示一个空的对象引用时才将 null 赋值给变量并使用该变量来表达空值的概念
undefined是一个标识符可以被当做变量来使用和赋值
void运算符void___ 没有返回值因此返回结果是undefinedvoid并不改变表达式的结果只是让表达式不返回值如果要将代码中的值设为undefined就可以使用void
var a 42;
console.log( void a, a ); // undefined 422.6、特殊的数字
NaN意指“不是一个数字”是一个特殊值它和自身不相等是唯一一个非自反的值因此无法对其进行比较那么应该如何判断它可以使用isNaN该方法意思是“参数是否不是NaN也不是数字”
var a 2 / foo;
isNaN( a ); // true我们也可以使用下边的方法
var a 2 / foo;
var b foo;
console.log(Number.isNaN(a)); // true
console.log(Number.isNaN(b)); // false无穷数Infinity
在JS中var a 1 / 0 的结果为Infinity如果该式中一个数为负数结果即为-Infinity
JS中零值分为0和-0为什么我们需要-0因为某些程序中的数据需要以级数形式来表示比如动画帧的移动速度
在ES6中新加入了一个工具方法Object.is…来判断两个值是否相等但是能使用“”和“”的时候就尽量不要使Object.is…因为前者的效率更高也更为通用
2.7、值和引用
在许多语言中复制和参数传递可以通过值复制或者引用复制来完成。引用就像一种特殊的指针是来指向变量的指针但是在JS中没有指针引用的工作机制也不尽相同。在JS中变量不可能成为指向另一个变量的引用。JS引用指向的是值。如果一个值有10个引用这些引用指向的都是同一个值它们之间没有引用/指向关系。
简单值基本类型值总是通过值复制的方式来赋值/传递包括null、undefined、字符串、数组、布尔和ES6中的symbol复合值—对象和函数则总是通过引用复制的方式来赋值/传递。
引用指向的是值本身而非变量所以一个引用无法更改另一个引用的指向
function foo(x) {x.push( 4 );x; // [1,2,3,4]// 然后x [4,5,6];x.push( 7 );x; // [4,5,6,7]
}
var a [1,2,3];
foo( a );
a; // 是[1,2,3,4]不是[4,5,6,7]我们不能通过引用 x 来更改引用 a 的指向只能更改 a 和 x 共同指向的值。
如果要将a的值变为[4,5,6,7]必须更改x指向的数组而不是为x赋值一个新数组
function foo(x) {x.push( 4 );x; // [1,2,3,4]// 然后x.length 0; // 清空数组x.push( 4, 5, 6, 7 );x; // [4,5,6,7]
}
var a [1,2,3];
foo( a );
a; // 是[4,5,6,7]不是[1,2,3,4]我们无法自行决定使用值复制还是引用复制一切由值的类型来决定。
3、总结
JS中的数组是通过数字索引的一组任意类型的值。字符串和数组类似但是它们的行为特征不同在将字符作为数组来处理时需要特别小心。JavaScript 中的数字包括“整数”和“浮点型”。
基本类型中定义了几个特殊的值。null 类型只有一个值 nullundefined 类型也只有一个值 undefined。所有变量在赋值之前默认值都是 undefined。void 运算符返回 undefined。
数 字 类 型 有 几 个 特 殊 值 包 括 NaN 意 指“not a number” 更 确 切 地 说 是“invalidnumber”、Infinity、-Infinity 和 -0。
简单标量基本类型值字符串和数字等通过值复制来赋值 / 传递而复合值对象等通过引用复制来赋值 / 传递。JavaScript 中的引用和其他语言中的引用 / 指针不同它们不能指向别的变量 / 引用只能指向值。
相关文章: