Javascript中的类型和语法(一) -- javascript中的数据类型,数组

JavaScript数据类型与数组疑惑点整理
本文主要介绍了JavaScript中的数据类型,包括string、number等,指出变量无类型只有值有类型,还整理了数据类型疑惑点,如typeof操作结果、null的特性等。此外,对数组相关内容进行讲解,涉及跨下标加入数组、slice()方法等。

1 javascript中的数据类型

string、number、boolean、null、undefined、object、function(object的子类型)

1.1 数据类型疑惑点整理

  • 在对变量执行 typeof 操作时,得到的结果并不是该变量的类型,而是该变量持有的值的类 型,因为 JavaScript中的变量没有类型,只有值才有。变量可以随时持有任何类型的值。
var a = 42;
typeof a; // "number"
a = true;
typeof a; // "boolean"
  • null 是基本类型中唯一的一个“假值”(falsy 或者 false-like)类型,typeof 对它的返回值为 “object”。
//可以用以下方式准确判断 null类型
var a = null;
(!a && typeof a === "object"); // true 
  • typeof 运算符总是会返回一个字符串:
//typeof 42 首先返回字符串 "number",然后 typeof "number" 返回 "string"。
typeof typeof 42; // "string"
  • undefined 和 undeclared
    已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明
    过的变量,是 undeclared 的。
//"is not defined"和"undefined"是两码事!!!
var a;
a; // undefined
typeof b; // "undefined" 无异常,代码可以继续执行
b; // ReferenceError: b is not defined
//RHS查询会直接抛出异常,后续代码无法继续执行

由typeof引申的安全机制:
由于typeof对于undefined的变量和undeclared的变量返回值都是undefined,故可以用typeof来规避异常。

//假设DEBUG是一个有可能不声明的全局变量
// 这样会抛出错误
if (DEBUG) {
 console.log( "Debugging is starting" );
}
// 这样是安全的
if (typeof DEBUG!== "undefined") {
 console.log( "Debugging is starting" );
}

//也可以用全局变量判断,因为对象中的未声明类型会是undefined,不报错
if (window.DEBUG) {
  // ..
}

//还有依赖注入模式规避异常
function doSomethingCool(FeatureXYZ) {
//LHS查询在非严格模式下未声明变量会创建全局变量
  var helper = FeatureXYZ || function() { /*.. default feature ..*/ };
  var val = helper();
  // ..
}

2 数组

2.1 数组疑惑点整理

  • 跨下标加入数组
var a = [ ];
a[0] = 1;
// 此处没有设置a[1]单元
a[2] = [ 3 ];
a[1]; // undefined
a.length; // 3 a[1]也占据了空间了
  • slice()
    arrayObject.slice(start,end) : slice() 方法可从已有的数组中返回选定的元素。
    start 规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
    end 规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
    无入参形式 slice() 返回该数组的一个数组复本
var arr = new Array();
arr[0] = "George";
arr[1] = "John";
arr[2] = "Thomas";
arr[3] = "James";
console.log(arr.slice(2,3));//["Thomas"]
console.log(arr.slice(1));//["John","Thomas","James"]

//slice() 返回参数列表的一个数组复本
function foo() {//转换数组并添加元素
	var arr = Array.prototype.slice.call( arguments );//arguments 函数的入参
	arr.push( "bam" );
	console.log( arr );
}
foo( "bar", "baz" ); // ["bar","baz","bam"]

//ES6可替代上述方式
var arr = Array.from( arguments );
  • 字符串与字符数组
var a = "foo";
var b = ["f","o","o"];
a.length; // 3
b.length; // 3
a.indexOf( "o" ); // 1
b.indexOf( "o" ); // 1
var c = a.concat( "bar" ); // "foobar"
var d = b.concat( ["b","a","r"] ); // ["f","o","o","b","a","r"]
a === c; // false
b === d; // false
a; // "foo" 
b; // ["f","o","o"]
a[1] = "O";//并未修改a
b[1] = "O";
a; // "foo"
b; // ["f","O","o"]
/*注:a[1] 在 JavaScript 中并非总是合法语法,在老版本的 IE 中就不被允许(现在可以了)。
正确的方法应该是 a.charAt(1)。*/

//反转字符串
var d = a
 // 将a的值转换为字符数组
 .split( "" )
 // 将数组中的字符进行倒转,Array的方法
 .reverse()
 // 将数组中的字符拼接回字符串,Array的方法
 .join( "" );
d; // "oof"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Funnee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值