Js相关笔记-1

持续更新,主要方便于存一些笔记。


对象

使用for...in循环,提取对象属性名

var obj = { key1: 1, key2: 2 }; Object.keys(obj); // ['key1', 'key2']

或者:

var obj = {'x':1,'y':2};

 var props = [];var i =0; 

for(var p in obj){

props[i++] = p};

console.log(props);

读取对象属性

var foo='bar';

var obj={foo:1,bar:2};

obj.foo// 1

obj[foo]// 2

备注:引用对象obj的foo属性时,如果使用点运算符,foo就是字符串;如果使用方括号运算符,但是不使用引号,那么foo就是一个变量,指向字符串bar。

var obj={0.7:'Hello World'};

obj['0.7']// "Hello World"

obj[0.7]// "Hello World"

数字加不加引号都可以,因为会被自动转为字符串。

var obj={123:'hello world'};

obj.123// 报错

obj[123]// "hello world"

对数值键名123使用点运算符,结果会报错

var person = { name: '老张' };

for (var key in person) {

if (person.hasOwnProperty(key))

{ console.log(key); } } // name

使用hasOwnProperty方法,在循环内部判断一下,某个属性是否为对象自身的属性。

var obj = {};

with (obj) {

  p1 = 4;

  p2 = 5;

}

obj.p1 // undefined

p1 // 4

如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

数组

var a = [1, 2, 3];

a.foo = true;

for (var key in a) {

  console.log(key);

}

// 0

// 1

// 2

// foo

可以遍历新增key

函数

var obj = { p: 1 };

function f(o) {

  o.p = 2;

}

f(obj);

obj.p // 2

传入函数f的是参数对象obj的地址。因此,在函数内部修改obj的属性p,会影响到原始值。

var obj = [1, 2, 3];

function f(o) {

o = [2, 3, 4]; }

f(obj);

obj // [1, 2, 3]

在函数f内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)的值实际是参数obj的地址,重新对o赋值导致o指向另一个地址,保存在原地址上的值当然不受影响。

同名参数:

function f(a, a) {

console.log(a); }

f(1, 2) // 2


function f(a, a) {

console.log(a); }

f(1) // undefined


function f(a, a){

console.log(arguments[0]); }

f(1) //

参考自:JavaScript 标准参考教程(alpha) -- JavaScript 标准参考教程(alpha)

你可能感兴趣的:(Js相关笔记-1)