ECMAScript的语法大量借鉴了C以及其他C语言(Java)
(难怪学习js的时候上手会比较快,毕竟在大学也是学过C和Java的)
严格模式为JavaScript定义了一种不同的解析和执行模型。在严格模式下ECMAScript3的一些不确定的行为将得到处理,对某些不安全的额操作也会抛出错误。
"use strict";
语句的结束使用分号 ; 加上分号可以避免输入不完整的错误,也可以通过删除空格来压缩代码。
js的变量是松散类型的,可以保存任何类型的数据
每个变量仅仅是一个用来保存值的占位符而已(这个描述很到位)
var message;
定义了一个message变量,但没有赋值,会保存成undefined
(有没有在开发过程中经常看到各种undefined的报错)
var message = "hi";
message = 100; // 有效,但不推荐
使用var定义的变量将成为该作用域下面的局部变量
function test(){
var message = "hi"; // 局部变量
}
test();
alert(message); // 错误!
不通过var定义的变量将成为全局变量
function test(){
message = "hi"; // 全局变量
}
test();
alert(message); // "hi"
在严格模式下将会抛出ReferenceError 错误。
可以使用一条语句定义多个变量
var message = "hi",
found = false,
age = 29; //高端的写法适合装X。。
var message;
alert(message == undefined); //true
未经初始化和未经声明的变量都会返回undefined
var message; // 这个变量声明之后默认取得了undefined 值
// 下面这个变量并没有声明
// var age
alert(typeof message); // "undefined"
alert(typeof age); // "undefined"
null表示空对象指针
var car = null;
alert(typeof car); // "object"
undefined 值是派生自null 值的
alert(null == undefined); //true
如果一个打算保存对象的变量还没有被赋值的时候,可以让其保存null
所有类型的值都可以通过Boolean()转成Boolean类型的值
非空字符串 ==> true
空字符串 ==> false
if 语句自动执行相应的Boolean 转换
null 和 undefined这两种会是什么情况呢?
var msg1 = undefined;
var msg2 = null;
console.log(Boolean(msg1)); // false
console.log(Boolean(msg2)); // false
所以当拿到的数据是null或undefined时,可以使用if语句去判断
不需要if(undefined === msg1) 直接 if(msg1)即可
支持三种进制,十进制,八进制,十六进制
小数点前面可以没有整数,但不推荐
浮点数的内存空间是整数的两倍,所以一些浮点数会被转换为整数
支持科学计数法表示极大值和极小值
var floatNum = 3.125e7; // 3.125 乘以10的7次方
浮点数的最高精确度是17位小数
将0.1和0.2转成二进制
0.1 => 0.0001 1001 1001 1001…
0.2 => 0.0011 0011 0011 0011…
取17位想加,再转成十进制就成了0.30000000000000004
if (a + b == 0.3){ // 不要做这样的测试!
alert("You got 0.3.");
}
parseFloat()只解析10进制的数
十六进制的数会被转成0
八进制会忽略第一个0
var num1 = parseFloat("1234blue"); //1234 (整数)
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000
parseInt()可以接受两个参数,第一个要转换的数值,第二个进制
var num = parseInt("070"); //num == 70
var num = parseInt("070",8); //num == 56
所以为了避免一些错误,我们在使用parseInt()方法时,应该指定第二个参数
parseInt()和parseFloat()只针对字符串进行转换;
Number()可以对任意类型的值进行转换;
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
字符串一旦创建,值不可以改变
要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值得字符串填充该变量。
var age = 11;
var ageAsString = age.toString(); // 字符串"11"
var found = true;
var foundAsString = found.toString(); // 字符串"true"
null和undefined没有tostring方法
可以转换任意类型的字符串
String(value)
Object 的每个实例都具有下列属性和方法。
constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)
就是Object()。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例
的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例
如:o.hasOwnProperty(“name”))。
isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型(第5 章将讨论原
型)。
propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in 语句
(本章后面将会讨论)来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符
串形式指定。
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值
相同。