2018-03-06 JavaScript红宝书学习笔记

第一章

defer属性的作用
字符串问题 
 

在使用"字符串。例如下面一个错误:

");
  }
src属性

需要注意的是,带有src属性的

数据类型

ECMAScript中规定了五种简单数据类型(基本数据类型)和一种复杂数据类型:

  • 简单数据类型
    • Undefined
    • Null
    • Boolean
    • Number
    • String
  • 复杂数据类型
    • Object
typeof操作

typeof是一个操作符而不是函数,但也可以加圆括号使用

var message = "something"
alert(typeof message); // "string"
alert(typeof(message)); // "string"
alert(typeof 95); // "number

typeof返回的可能值有:

  • "number"
  • "string"
  • "boolean"
  • "undefined"
  • "object" (null也返回"object")
  • "function" (从技术角度讲,函数在ECMAScript中是对象,然而由于特殊性,因此通过typeof来区分函数和其他对象是有必要的)

对尚未初始化的变量和未声明的变量执行typeof操作都会返回undefined:

var message;
// 下面这个变量并未声明
// var age

alert(typeof message); // "undefined"
alert(typeof age); // "undefined"

对尚未声明的变量,只能执行一项操作,即typeof,其他操作将导致报错。
undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true(两个等号):

alert(null == undefined); // true

如果用三个等号则返回false:

alert(null === undefined); // false
数据的Boolean值
数据类型 true false
String 任何非空字符串 ""(空字符串)
Number 任何非零数值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined undefined

ECMAScript中所有类型的值都有与Boolean值等价的值

Number

八进制用前置0代表,十六进制用前置0x代表,如果前置了0,但是数值超过八进制,则前置0被忽略,最终按十进制表示。

var n1 = 070; // 八进制的56
var n2 = 079; // 无效的八进制数值--解析为79

var n3 = 0x1f; // 十六进制的31,可大写,也可小写

由于浮点数值需要的内存空间是整数的两倍,因此ECMAScript会不失时机地将浮点数值转化为整数值。

var floatNum1 = 1.; // 小数点后面没有数字,解析为1
var floatNum2 = 10.0; // 整数,解析为10

永远不要测试某个特定的浮点数值。

if (a + b == 0.3) { // 不要做这样的测试!
  alert("you got 0.3");
}

任何数除以0将得到NaN,任何涉及NaN地操作都会返回NaN,NaN与任何值都不想等,包括NaN本身。
isNaN()方法可以用来检测是否是NaN,isNaN()在接收到一个值之后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,例如字符串“10”或Boolean值:

alert(isNaN(NaN)); // true
alert(isNaN(10)); // false
alert(isNaN("10")); // false (可以被转换为数值10)
alert(isNaN("blue")); // true
alert(isNaN(true)); // false(可以被转换为数值1)

尽管有点不可思议,但isNaN确实也适用于对象。在基于对象调用isNaN()时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值,如果不能,则基于这个返回值再调用toString()方法,再测试返回值。

Object

Object的每个实例都具有下列属性和方法

  • Constructor 构造函数
  • hasOwnProperty(propertyName): 用于检查给定的属性在当前实例中(而不是在实例原型中)是否存在。其中,作为参数的属性名必须以字符串形式指定。
  • isPrototypeOf(object)
  • propertyIsEnumerable
  • toLocalString()
  • toString()
  • valueOf()
一元操作符
var s1 = "2"; 
var s2 = "z"; 
var b = false; 
var f = 1. 1; 
var o = { 
    valueOf: function() { return -1; } 
}; 
s1++; // 值 变成 数值 3 
s2++; // 值 变成 NaN 
b++; // 值 变成 数值 1 
f--; // 值 变成 0. 10000000000000009( 由于 浮点 舍入 错误 所致) 
o--; // 值 变成 数值- 2

一元+操作符加在变量前面,等同于Number()操作。

var s1 = "2"; 
var s2 = "z"; 
var b = false; 
var f = 1. 1; 
var o = { 
    valueOf: function() { return -1; } 
}; 

s1++; // 值 变成 数值 3 
s2++; // 值 变成 NaN 
b++; // 值 变成 数值 1 
f--; // 值 变成 0. 10000000000000009( 由于 浮点 舍入 错误 所致) 
o--; // 值 变成 数值- 2
o = +o; // 值变成-1

你可能感兴趣的:(2018-03-06 JavaScript红宝书学习笔记)