You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
var point = {x: 1, y: 2};
point
Objectx: 1y: 2__proto__: Object__defineGetter__: __defineGetter__()__defineSetter__: __defineSetter__()__lookupGetter__: __lookupGetter__()__lookupSetter__: __lookupSetter__()constructor: Object()hasOwnProperty: hasOwnProperty()isPrototypeOf: isPrototypeOf()propertyIsEnumerable: propertyIsEnumerable()toLocaleString: toLocaleString()toString: toString()valueOf: valueOf()get __proto__: __proto__()set __proto__: __proto__()
'valueOf' in point
true
'__proto__' in point
true
'x' in point
true
'z' in point
false
var array = [4,5,6]; 4 in array
false
'4' in array
false
0 in array
true
'0' in array
true
instanceof 实例运算符
所有的对象都是Object的实例。
理解原型链~
var d = new String('test');
d instanceof String
true
d instanceof Date
false
d instanceof Object
true
1. 原始表达式-primary expression
表达式的原子级别。最小。常量/直接量、关键字、变量。
常量/直接量:1.23、'hello'、/pattern/----back to part3\10
关键字/js的一些保留字:true false null this
变量:i、sum、 undefined 当变量不存在时,表达式运算结果为undefined
2. 对象和数组的初始化表达式-对象直接量\数组直接量-新创建的对象和数组
不同于布尔直接量,非原始表达式,含有子表达式。
数组初始化表达式:[]、[1+2, 3+4]、[[1,2,3].[2,3,4]]、
[1,,,,,5] 这种中间空位会被填充为 undefined。
对象表达式:
3. 函数定义表达式-函数直接量-function
定义一个js函数。
以下代码中可以区别函数直接量和函数。
函数后不用加; 而函数直接量需要加;区分是声明变量结束。
4. 属性访问表达式-得到一个对象属性、或数组元素的值。(第六章)
. 运算和[]运算
先计算.[]运算符前的表达式,若为null或undefined,则抛出异常。so,经常用obj&&obj.x
这种语句判断。属性不存在,则返回undefined。
点运算符只适用要访问的属性名称是合法的标识符,且需要知道要访问的属性名。
用$.each可以遍历属性。
若属性名为保留字或包含空格和标点或是数字(数组而言),须使用方括号。
属性名是运算得出的值而不是固定值时,须用方括号。
对象属性:
数组属性:
5. 调用表达式-调用函数或方法。(第八章)
若函数使用return语句,则这个返回值为整个调用表达式的值。否则为undefined。
方法调用是针对一个对象里的方法而言。其实最终都是函数了~~(第九章)
普通函数调用,通常使用全局对象作为this的值,ES5严格模式下,this值为undefined。
了解严格模式 5.7.3
6. 对象创建表达式-创建一个对象并调用构造函数初始化新对象的属性。
7. 运算符概述-关键字运算符、标点运算符。
delete
instanceof
delete 删除属性
当你删除一个数组元素时,数组的 length 属性并不会变小。
8. 算术表达式
9.关系表达式
相等和不等运算符
== 可以允许类型转化。
=== 则不允许类型转化。
NaN 跟谁都不等,所以 x !== x ,可以用来判断x是不是NaN~~
比较运算符
一般用于数字和字符串。
加号运算符和比较运算符的区别,加号以字符串优先,比较则以数字为优先。
in 运算符
instanceof 实例运算符
所有的对象都是Object的实例。
理解原型链~
10. 逻辑表达式
以下等价:
11. 赋值表达式
= 给变量或属性赋值。
优先级很低的~
12. 表达式计算
eval
解释运行由 JS 源码组成的字符串,并返回值。
尽量不要用。
eval() 的问题:动态执行代码。
解释器不能提前优化。
当eval被赋值给其他变量时,调用该变量的方法很难优化。
eval() 传参字符串,并对该字符串当成JS代码进行编译(parse),编译成功后就执行该段代码。失败则抛出异常。
eval() 解析后的代码,如果有变量和eval外的代码相同,eval会使用该变量,甚至有可能改变该变量的值。
即,eval会改变它所在环境下的变量,如果很不幸这个eval在最顶层处调用,则会影响全局函数和全局变量。。
当其他代码来影响你的代码时,你的代码将会变得多么不可控~~~
严格eval
私有上下文环境的局部eval~ 严格模式下,可以查询或更改局部变量,不能在局部作用域中定义新的变量或函数。
更像一个运算符~
但是,能不用就不要用了~~
13. 其他运算符
条件运算符~
?: 三目运算~
typeof运算符
两种写法~
void 运算符
一般用于 url中。
The text was updated successfully, but these errors were encountered: