在JavaScript中,变量是松散类型的,所谓松散类型就是可以用变量来保存任何类型的数据。换句哈说,每个变量仅仅是一个用户保存值的占位符而已。在JavaScript中定义变量使用var来声明一个变量,后面跟一个变量名,变量名必须是合法的标识符,包含:大小写字母,数组,下划线‘_’,美元符号‘$’,但不能以数字开头。
在上面提到,JavaScript中的变量是松散类型的,但是松散类型不是说JavaScript中没有数据类型,而意思是:我们在用"盒子"来存储信息时,不必规定这个”盒子“这能存储数字类型的信息,而是数字,字符串,日期等什么类型的信息都可以存储,但是数据本身是由数据类型的。
var name = 'Bob';
name = 10; // 有效!但不推荐
var name = 'Bob';
var age = 16;
var stuNo = 0012323;
// 也可以这样定义
var name = 'Bob', age = 16, stuNo = 0012323;
var foo = 42; // foo is a Number now
var foo = "bar"; // foo is a String now
var foo = true; // foo is a Boolean now
6种原始类型:
对象可以通过new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的示例并为其添加属性和(或)方法,就可以创建自定义对象,如下所示:
var o = new Object();
我们也可以通过下面的方式直接创建一个对象:
var person = { name: 'Bob', age: 20, gender: 'male' };
下面展示一下使用typeof的示例:
var message = 'some string';
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // number
null表示"没有对象",即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
var i;
i // undefined
function f(x){console.log(x)}
f() // undefined
var o = new Object();
o.p // undefined
var x = f();
x // undefined
ECMAScript 规范认为,既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性,即有
undefined == null; //true
不要试图通过转换数据类型来解释这个结论,因为:
Number(null); // 0
Number(undefined); // NaN
//在比较相等性之前,null 没有被转换为其他类型
null == 0 ; //false
但 === 会返回 false ,因为全等操作 === 在比较相等性的时候,不会主动转换分项的数据类型,而两者又不属于同一种类型:
undefined === null; //false,类型不相同
undefined !== null; //true, 类型不相同
NaN是一个值类型,同是也是一个数值.意思是Not A Number,这个都知道是什么意思.值比较特殊,特殊在于NaN是一个数字,是一个与任何数值都不相等的数字.
javascript:alert(typeof(NaN));可以完全证实,这是一个数字类型的值.也就是说NaN是当时转换时一种出错的策略,转成一个谁也不认识的数字而已.从这个角度上理解它是一个数字,可以理解成数学中的无穷大或是无穷小.但与数学中一个理论是相悖的,我们常说,无穷大加1等于无穷大是错误的.正是无空大加1不等于无穷大,所以无穷大也不等于它自己本身.所以数值NaN连自身都不会相等的.
而在javascript中NaN既然作为一个无穷大,那么它表示的就不再是一个值,而是一类值,所以有时可视NaN是一个类型.
正是这样的边缘问题,可以导致作如下测试是正确的:
javascript:alert(NaN+1);结果是无穷大.
但唯一的是NaN是一个不确定数,所以NaN不能等于NaN.
这好比是randomise中的random,random +1 还是一个不确定的数值,但random不会等于random一样.两者的区别在于random能生成一个确定数,但本身不确定.而NaN生成的就是一个不确定数.
var x = 0;
function fun(){
console.log(x);
let x = 1;
x++;
}
fun();
上述代码将会在console控制台中输出的结果是?(两个空格代表换行)
Uncaught ReferenceError: x is not defined
var x = 0;
function fun(){
console.log(x);
var x = 1;
x++;
}
fun();
上述代码将会在console控制台中输出的结果是?(两个空格代表换行)
undefined
<script type="text/javascript">
document.write("Hello World!");
</script>
通过此方式就可以在当前页面中引入script标签中的JavaScript代码。
<script src="./main.js" />