夯实基础js

声明(Declarations)

undefined值在布尔类型环境中会被看成false。javascript

数值类型环境中undefined值会被转换为NaN。java

对一个空变量求值时,空值 null 在数值类型环境中会被看成0来对待,而布尔类型环境中会被看成false数组

JavaScript 变量感受上是被“提高”或移到了全部函数和语句以前。提高后的变量将返回 undefined 值,因此即便在使用或引用某个变量以后存在声明和初始化操做,这个被提高的引用仍将获得 undefined 值。浏览器

因为存在变量声明提高,一个函数中全部的var语句应尽量地放在接近函数顶部的地方。这大大地提高了程序代码的清晰度。数据结构

(在 ECMAScript 2015 中,let(const)将不会提高变量到代码块的顶部。所以,在变量声明以前引用这个变量,将抛出错误ReferenceError。这个变量将从代码块一开始就处在一个“暂时性死区”,直到这个变量被声明为止。)框架

对于函数,只有函数声明会被提高到顶部,不包括函数表达式。函数

/* 函数声明 */
foo(); // "bar"   
function foo() {
  console.log("bar");
}   

/* 函数表达式   表达式定义的函数,成为匿名函数。匿名函数没有函数提高。*/   
baz(); // TypeError: baz is not a function
//此时的"baz"至关于一个声明的变量,类型为undefined。
因为baz只是至关于一个变量,所以浏览器认为"baz()"不是一个函数。
var baz = function() {
  console.log("bar2");
};

全局对象是 window,你能够经过指定 window 或 frame 的名字,从一个 window 或 frame 访问另外一个 window 或 frame 中声明的变量。例如,设想一个叫 phoneNumber 的变量在文档里被声明,你能够在子框架里用 parent.phoneNumber 来引用它。this

常量(Constants)

在同一做用域中,不能用与变量或函数一样的名字来命名常量。然而,对象属性是不受保护的,因此下面的语句执行没有问题。spa

const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";

数据结构和类型

六种是 原型 的数据类型 以及 Object 对象设计

  • Boolean. 布尔值,true 和 false.

    1. 一个代表 null 值的特殊关键字。 JavaScript 是大小写敏感的,所以 null 与 Null、NULL或其余变量彻底不一样。

    1. 变量未定义时的属性。

  • Number. 表示数字,例如: 42 或者 3.14159。

  • String. 表示字符串,例如:"Howdy"

  • Symbol ( 在 ECMAScript 6 中新添加的类型).。一种数据类型,它的实例是惟一且不可改变的。

Objects 和 functions 是本语言的其余两个基本要素。你能够将对象视为存放值的命名容器,而将函数视为你的应用程序可以执行的过程(procedures)。

在涉及加法运算符(+)的数字和字符串表达式中,JavaScript 会把数字值转换为字符串。

x = "The answer is " + 42 // "The answer is 42"
y = 42 + " is the answer" // "42 is the answer"

在涉及其它运算符(译注:以下面的减号'-')时,JavaScript语言不会把数字变为字符串。例如(译注:第一例是数学运算,第二例是字符串运算):

"37" - 7 // 30
"37" + 7 // "377"

字符串转换为数字(converting strings to numbers)

parseInt()和parseFloat()

将字符串转换为数字的另外一种方法是使用单目加法运算符。

"1.1" + "1.1" = "1.11.1"
(+"1.1") + (+"1.1") = 2.2   // 注:加入括号为清楚起见,不是必需的。

对象属性名字能够是任意字符串,包括空串。若是对象属性名字不是合法的javascript标识符,它必须用""包裹。属性的名字不合法,那么便不能用.访问属性值,而是经过类数组标记("[]")访问和赋值。

var unusualPropertyNames = {
  "": "An empty string",
  "!": "Bang!"
}
console.log(unusualPropertyNames."");   // 语法错误: Unexpected string
console.log(unusualPropertyNames[""]);  // An empty string
console.log(unusualPropertyNames.!);    // 语法错误: Unexpected token !
console.log(unusualPropertyNames["!"]); // Bang!

注意:

var foo = {a: "alpha", 2: "two"};
console.log(foo.a);    // alpha
console.log(foo[2]);   // two
//console.log(foo.2);  // Error: missing ) after argument list
//console.log(foo[a]); // Error: a is not defined
console.log(foo["a"]); // alpha
console.log(foo["2"]); // two

在ES2015,对象字面值扩展支持在建立时设置原型,简写foo:foo分配,定义方法,加工父函数(super calls),计算属性名(动态)。总之,这些也带来了对象字面值和类声明紧密联系起来,让基于对象的设计得益于一些一样的便利。

var obj = {
    // __proto__
    __proto__: theProtoObj,
    // Shorthand for ‘handler: handler’
    handler,
    // Methods
    toString() {
     // Super calls
     return "d " + super.toString();
    },
    // Computed (dynamic) property names
    [ 'prop_' + (() => 42)() ]: 42
};

能在JavaScript的字符串中使用的···特殊字符···

clipboard.png

转义字符

// 引号转义
var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
// 转义反斜线
var home = "c:\\temp";
// 转义换行 一条语句拆成多行书写
var str = "this string \
is broken \
across multiple\
lines."
console.log(str);   // this string is broken across multiplelines.
// Javascript没有“heredoc”语法,但能够用行末的换行符转义和转义的换行来近似实现 
var poem = 
"Roses are red,\n\
Violets are blue.\n\
I'm schizophrenic,\n\
And so am I."
相关文章
相关标签/搜索