js-20170606-数据类型
Posted jialuchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js-20170606-数据类型相关的知识,希望对你有一定的参考价值。
javascript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。ES6 又新增了第七种 Symbol 类型的值
JavaScript有三种方法,可以确定一个值到底是什么类型。
1.布尔值 (下面六个值被转为false 其他都转化成true)
需要特别注意的是,空数组([])和空对象({})对应的布尔值,都是true。
2.数值
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
parseInt() 、 Number()、parseFloat()
3.字符串
字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始)
var s = ‘hello‘; s[0] // "h" s[1] // "e" s[4] // "o" // 直接对字符串使用方括号运算符 ‘hello‘[1] // "e"
4.对象
检查变量是否声明
if (‘a‘ in window) {
// 变量 a 声明过
} else {
// 变量 a 未声明
}
查看所有属性
使用Object.keys方法
var o = {
key1: 1,
key2: 2
};
Object.keys(o);
// [‘key1‘, ‘key2‘]
in运算符
in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false;
在JavaScript语言中,所有全局变量都是顶层对象(浏览器的顶层对象就是window对象)的属性,因此可以用in运算符判断,一个全局变量是否存在。
for…in循环
for...in循环有两个使用注意点。
如果只想遍历对象本身的属性,可以使用hasOwnProperty方法,在循环内部判断一下是不是自身的属性。
5.数组
本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object。
数组的length属性是可写的。如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少到length设置的值。
var arr = [ ‘a‘, ‘b‘, ‘c‘ ];
arr.length // 3
arr.length = 2;
arr // ["a", "b"]
将数组清空的一个有效方法,就是将length属性设为0。
var arr = [ ‘a‘, ‘b‘, ‘c‘ ];
arr.length = 0;
arr // []
in 运算符
检查某个键名是否存在的运算符in,适用于对象,也适用于数组。
var arr = [ ‘a‘, ‘b‘, ‘c‘ ]; 2 in arr // true ‘2‘ in arr // true 4 in arr // false
使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。
var a = [1, 2, 3];
delete a[1];
a[1] // undefined
a.length // 3
6.函数
JavaScript有三种方法,可以声明一个函数。
(1)function命令
function print(s) {
console.log(s);
}
(2)函数表达式
var print = function(s) {
console.log(s);
};
这种写法将一个匿名函数赋值给变量。这时,这个匿名函数又称函数表达式(Function Expression),因为赋值语句的等号右侧只能放表达式。
采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。
(3)Function构造函数(几乎不使用)
var add = new Function(
‘x‘,
‘y‘,
‘return x + y‘
);
// 等同于
function add(x, y) {
return x + y;
}
Function构造函数,除了最后一个参数是函数的“函数体”,其他参数都是函数的参数。
这种声明函数的方式非常不直观,几乎无人使用。
函数可以调用自身,这就是递归
如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。
不能在条件语句中声明函数
length属性
length属性返回函数预期传入的参数个数,即函数定义之中的参数个数。
toString()
函数的toString方法返回函数的源码。
函数作用域
在函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。
var v = 1;
function f(){
console.log(v);
}
f() // 1
在函数内部定义的变量,外部无法读取,称为“局部变量”
function f(){
var v = 1;
}
v // ReferenceError: v is not defined
对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量。
if (true) {
var x = 5;
}
console.log(x); // 5
函数本身的作用域
函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是其声明时所在的作用域,与其运行时所在的作用域无关。
参数
参数传递方式:函数参数如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递(passes by value)。这意味着,在函数体内修改参数值,不会影响到函数外部。
如果函数参数是复合类型的值(数组、对象、其他函数),传递方式是传址传递(pass by reference)。也就是说,传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
注意,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
arguments对象
arguments对象包含了函数运行时的所有参数
以上是关于js-20170606-数据类型的主要内容,如果未能解决你的问题,请参考以下文章
1.19.6.数据类型数据类型列表结构化的数据类型其他数据类型数据类型注解