原生JavaScript语法(一)

20171213-1218

1基本

  • js原型数据类型:Boolean,null,undefined,Number,String,Symbol(ECMAScript6) ;
//Symbols在for...in迭代中不可枚举;
var obj = {};
obj[Symbol("a")] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";
for (var i in obj) {
   console.log(i); // logs "c" and "d"
}
//当永JSON.stringify()时,以symbol作为键的属性辉被忽略;
JSON.stringify({[Symbol("foo")]: "foo"});                 
// '{}'
  • Object
  • js {},可视为其他语言中Map或者Dictionary的数据结构——一组键值对;
js中的 键 必须是  字符串(这是js中对象的一个小问题,实际上用Number或者其他数据类型做键也是合理的);
为了解决这个问题,最新的ES6规范引入了:Map;

  • Map-极快的查找速度;
var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael');
或者
var m = new Map();
m.set("Adam",77);m.set("Bob",99);
m.get("Bob");
m.delete("Adam");
  • Set是一组key的集合,key不能重复
var s = new Set([1,2,3,'3']);
s.add(4);
s.delete(2);
  • iterable - Array,Map,Set都属于iterable类型
具有iterable类型的集合可以通过新的 for of来遍历;
var a = [1,2,3];
for(var x of a){}
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍历Array
    console.log(x);
}
for (var x of s) { // 遍历Set
    console.log(x);
}
for (var x of m) { // 遍历Map
    console.log(x[0] + '=' + x[1]);
}
  • for…of 和 for…in
//for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。
  • forEach() ES5.1
var s = new Set(['a','b','c']);
s.forEach(function(element){
    console.log(element);
})

2函数

  • 定义和调用
  • 变量作用域
function foo(){
    var x = 1;
    function bar(){
        var x = "A";
        console.log("x in bar() = "+x);//A
    }
    console.log("x in foo() = "+x);//1
    bar();
}
//调用foo()
foo();
//结果
x in foo()  = 1
x in bar() = A

  • 变量提升,值不提升
function foo(){
    var x = "hello,"+y;
    console.log(x);
    var y = "bob";
}
//调用foo()
foo();
//结果
hello,undefined
//它被提升成了
function foo(){
    var y;
    var x = "hello,"+y;
    console.log(x);
    y = "bob";
}

  • 由于JavaScript提升声明,不提升值;所以,在函数内部定义变量,严格遵守,在函数内部首先申明所有变量;
function foo() {
    var
        x = 1, // x初始化为1
        y = x + 1, // y初始化为2
        z, i; // z和i为undefined
    // 其他语句:
    for (i=0; i<100; i++) {
        ...
    }
}
  • 全局作用域
//JavaScript默认有一个全局对象window;
//全局作用域的变量,实际上是被绑定到window的一个属性;
var course = "learn";
alert(course);//learn
alert(window.course);//learn
  • 由于函数定义有两种方式,以变量方式var foo = function(){}定义的函数实际上也是一个全局变量;因此,顶层函数的定义也被视为一个全局变量,并绑定到window对象:
'use strict'
function foo(){
    alert("foo");
}
foo();//直接调用
window.foo();//通过window.foo()调用

//我们每次调用的alert()函数也是window的一个变量;
var old_alert = window.alert;
//给alert赋一个新函数
window.alert = function(){console.log("不alert了,打印");}
alert();
//结果
"不alert了,打印"
  • JavaScript只有一个全局作用域,任何变量(函数也视为变量),如果没有在当前函数作用域中找到,就会继续往上查找;最后如果在全局作用域中也没有找到,则报ReferenceError错误;
  • 名字空间;如果不同的JavaScript文件使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现;
//减少冲突的一个办法:把自己的所有变量和函数,全部绑定到一个全局变量中
var myapp = {};//唯一的全局变量
myapp.name = "myname";
myapp.version = 1.0;
myapp.foo = function(){
    return "lalala";
};
//许多JavaScript库都是这样做的:jQuery,YUI,underscore等

  • 局部作用域:函数内部;需要另外解决“块级作用域”的问题;
//ES6引入了新的关键字let,申明一个块级作用域
function foo() {
    var sum = 0;
    for (let i=0; i<100; i++) {
        sum += i;
    }
    // SyntaxError:
    i += 1;
}
  • 常量;ES6之前js只能申明变量;ES6引入新的关键字const定义常量;const和let都有块级作用域;
//ES6之前
var PI  =3.14;
//ES6
const PI = 3.14;
PI=3;//这样修改不了;某些浏览器不报错,但是不起作用
PI;//3.14

  • 解构赋值:ES6,同时对一组变量进行赋值;
var array = ['hello', 'JavaScript', 'ES6'];
var x = array[0];
var y = array[1];
var z = array[2];
//还可以嵌套赋值
let [x, [y, z]] = ['hello', ['JavaScript', 'ES6']];
//还可以忽略某些元素
let [, , z] = ['hello', 'JavaScript', 'ES6']; // 忽略前两个元素,只对z赋值第三个元素
z; // 'ES6'
  • 若需要从一个对象中 取出 若干属性,也可以使用解构赋值;
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school'
};
var {name, age, passport} = person;
// name, age, passport分别被赋值为对应属性:
console.log('name = ' + name + ', age = ' + age + ', passport = ' + passport);
//name = 小明, age = 20, passport = G-12345678

//如果 要使用的变量名  和 属性名不一致,可以用这样获取:
var person = {
    name: '小明',
    age: 20,
    gender: 'male',
    passport: 'G-12345678',
    school: 'No.4 middle school'
};

// 把passport属性赋值给变量id:
let {name, passport:id} = person;
name; // '小明'
id; // 'G-12345678'
// 注意: passport不是变量,而是为了让变量id获得passport属性:
passport; // 'G-12345678'

var {hostname:domain, pathname:path} = location;
domain
"www.liaoxuefeng.com"
path
"/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344993159773a464f34e1724700a6d5dd9e235ceb7c000"
hostname//VM642:1 Uncaught ReferenceError: hostname is not defined
    at <anonymous>:1:1

  • 可以利用解构赋值 传参:
function buildDate({year, month, day, hour=0, minute=0, second=0}) {
    return new Date(year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
}
buildDate({ year: 2017, month: 1, day: 1 });
buildDate({ year: 2017, month: 1, day: 1, hour: 20, minute: 15 });
  • 方法:在一个对象中 绑定函数,称为这个对象的方法
var xiaoming = {
    name:"小明",
    birth:1991,
    age:function(){
        var y = new Date().getFullYear();
        return y-this.birth;
    }
};
xiaoming.age;
xiaoming.age();
  • 方法,在内部使用了this关键字;在一个方法内部,this始终指向当前对象,也就是xiaoming这个变量;所以,this.birth,可以拿到xiaoming的birth属性;
//要保证,this 的指向正确,必须用obj.xxx()的形式调用!
var fn = xiaoming.age;
fn();//NaN
  • ECMA:在strict模式下让函数的this指向undefined;避免不容易发现的错误;
  • 下面的写法有错:this指针只在age方法的函数内指向xiaoming,在函数内部定义的函数,this又指向undefined了(在非strict模式下,它重新指向的全局对象window)
'use strict';

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        function getAgeFromBirth() {
            var y = new Date().getFullYear();
            return y - this.birth;
        }
        return getAgeFromBirth();
    }
};

xiaoming.age(); 
  • 正确的:用一个that变量首先捕获this;用var that = this,就可以放心地在方法内部定义其他函数,而不是把所有语句都堆到一个方法中;
'use strict';
var xiaoming = {
    name:"小明",
    birth:1991,
    age:function(){
        var that = this;//在方法内部一开始就捕获this
        function getAgeFromBirth(){
            var y = new Date().getFullYear();
            return y-that.birth;
        }
        return getAgeFromBirth();
    }
}
xiaoming.age();//26
  • apply:可以人为指定函数的this指向哪个对象,它接收2个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,标识函数本身的参数;
function getAge(){
    var y = new Date().getFullYear();
    return y-this.birth;
}
var xiaoming = {
    name:'小明',
    birth:1991,
    age:getAge
};
xiaoming.age();//26
getAge.apply(xiaoming, []);//26
  • call: 类似于apply,区别:apply()把参数打包成Array再传入;call()把参数按顺序传入;
Math.max.apply(null,[2,5,4]);
Math.max.call(null,3,5,4);
//对普通函数调用,通常把this绑定为null
  • 装饰器:利用apply(),还可以动态改变函数的行为;JavaScript的所有对象都是动态的,即使内置的函数,我们也可以重新指向新的函数。现在假定我们想统计一下代码一共调用了多少次parseInt(),可以把所有的调用都找出来,然后手动加上count += 1,不过这样做太傻了。最佳方案是用我们自己的函数替换掉默认的parseInt():
'use strict'
var count = 0;
var oldParseInt = parseInt;
window.parseInt = function(){
    count += 1;
    return oldParseInt.apply(null,arguments);//调用原函数
}
//测试
parseInt('10');
parseInt('20');
parseInt('30');
console.log('count = ' + count); // 3

3 高阶函数

  • 一个函数可以接收另一个函数作为参数;
function add(x,y,f){
    return f(x)+f(y);
}
add(-5,6,Math.abs);//11

3.1 map/reduce

  • map()的方法定义在JavaScript的Array中;
'use strict';
function pow(x){
    return x * x;
}
var arr = [1,2,3,4,5,6,7,8,9];
var results = arr.map(pow);

var arr = [1,3,5,7,9];
arr.reduce(fucntion(x,y){
    return x+y;
});//25
  • 使用map/reduce
//将字符串'12468'变成整数12468,不使用parseInt
var ori = '12468';
function string2int(mystr){
    var result = mystr.split("").map(function(x){return +x;}).reduce(function(x,y){return x*10+y;});
    return result;
}
string2int(ori);//12468
  • 注意事项之一
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
//结果r,是!:1,NaN,NaN
//因为,map()接收的回调函数可以有3各参数callback(currentValue,index,array),通常仅需要第一个参数,而忽略了传入的后面两个参数;但是,parseInt(string,radix),没有忽略第二个参数,导致实际上:
parseInt('0',0);//按十进制转换
parseInt('1',1);//NaN,没有一进制
parseInt('2',2);//NaN,按二进制转换不允许出现2
//可以改为
r = arr.map(Number);
//因为Number(value)函数仅接收一个参数
function normalize(arr){
    return arr.map(function(x){var a = x.toLowerCase();
    return a.slice(0,1).toUpperCase()+a.slice(1);})
}
//入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。

3.2 filter-筛选作用

  • filter(),接收一个函数;把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素;
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r;//1,5,9,15
//去掉一个Array元素中的空字符串
var arr = ['A', '', 'B', null, undefined, 'C', '  '];
var r = arr.filter(function (s) {
    return s && s.trim(); // 注意:IE9以下的版本没有trim()方法
});
r;//["A", "B", "C"]

  • filter接收的回调函数,可以有多个参数,通常,只使用第一个参数(Array的某个元素);还可以接收另外两个函数,表示元素的位置和数据本身;
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
    console.log(element); // 依次打印'A', 'B', 'C'
    console.log(index); // 依次打印0, 1, 2
    console.log(self); // self就是变量arr
    return true;
});
//筛选素数
function get_primes(arr){
    arr.filter(function(x){
        if(x==1){return false;}
        var i = 2;
        while(i < x){
           if(x % i == 0){return false;}
           i++;
        }
        return true;
    });
}

3.3 sort-排序-sort默认按字符串排序,按ASCII;

var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同一对象
//sort()可接收函数,自定义大小比较方法
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
    if (x < y) {
        return 1;
    }
    if (x > y) {
        return -1;
    }
    return 0;
}); // [20, 10, 2, 1]

3.4 闭包

  • 函数作为返回值
  • 注意,返回的函数不立即执行的问题;
  • 创建一个匿名函数让它立即执行;
function count(){
    var arr = [];
    for(var i=1;i<=3;i++){
        arr.push((function(n){
        return function(){
        return n*n;
        }})(i));
    }
    return arr;
}
var re = count();
var f1=re[0];
var f2=re[1];
var f3=re[2];
f1();//1
f2();//4
f3();//9
//由于JavaScript语法解析的问题,要用括号把整个函数定义括起来,否则会报SyntaxError错误;
(function (x) { return x * x }) (3);
  • 通过闭包,封装一个私有变量; 在返回的对象中,实现了一个闭包,该闭包携带了局部变量x,并且,从外部代码根本无法访问到变量x;
  • 闭包,就是携带状态的函数,并且它的状态可以完全对外隐藏起来;
function create_count(initial){
    var x = initial || 0;
    return {
        inc:function(){
            x+=1;
            return x;
        }
    }
}
var c1 = create_count();
c1.inc();//1
c1.inc();//2
c1.inc();//3
var c2 = create_count(10);
c2.inc();//11
c2.inc();//12
c2.inc();//13
  • 闭包,还可以把多惨呼的函数,变成单参数的函数;比如 计算x的y次方,可以用Math.pow(x,y),考虑到经常用x平方和x三次方,可以利用闭包创建新的函数pow2和pow3;
function make_pow(n){
    return function(x){
        return Math.pow(x,n);
    }
}
//创建两个新函数
var pow2 = make_pow(2);
var pow3 = make_pow(3);

3.5 箭头函数

  • ES6标准新增了一种新的函数,Arrow Function箭头函数;
x => {
    if(x>0){
        return x*x;
    }
    else{
        return -x*x;
    }
}

//如果参数不是一个,就要用括号()括起来:
(x,y) => x*x + y*y;

//无参数
() => 3.14

// 可变参数
(x,y,...rest) => {
    var i,sum = x+y;
    for(i=0;i<rest.length;i++){
        sum+=rest[i];
    }
    return sum;
}

// 如果要返回一个对象
x => ({foo:x})
  • this; 使用箭头函数,this总是指向词法作用域,就是外层调用者obj;
var obj = {
    birth:1991,
    getAge:function(){
        var b = this.birth;
        var fn = () => new Date().getFullYear() - this.birth;//可以正确指向obj的birth
        return fn();
        //var fn = function () {
            //return new Date().getFullYear() - this.birth; // this指向window或undefined
        };
    }
}
obj.getAge();//27
  • 由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定——传入的第一个参数被忽略;
var obj = {
    birth: 1990,
    getAge: function (year) {
        var b = this.birth; // 1990
        var fn = (y) => y - this.birth; // this.birth仍是1990
        return fn.call({birth:2000}, year);
    }
};
obj.getAge(2015); // 25
'use strict'
var arr = [10, 20, 1, 2];
arr.sort((x, y) => {
   if(x<y){return -1;}
   if(x>y){return 1;}
   return 0;
});
console.log(arr); // [1, 2, 10, 20]

3.5 generator生成器ES6

function*  fib(max){
    var
        t,
        a=0,
        b=1,
        n=0;
    while(n<max){
        yield a;
        [a,b]=[b,a+b];
        n++;
    }
    return;
}
for(var x of fib(10)){
    console.log(x);
}
  • generator可以在执行过程中多次返回,所以看上去就像一个可以记住记住执行状态的函数;
  • 这样,写一个generator就可以实现需要用面向对象才能实现的功能;
  • 还有一个好处:把异步回调代码变成“同步”代码;回调越多,代码越难看;有了generator,用AJAX可以这么写:(看上去是同步的代码,实际上是异步的)
try{
    r1 = yield ajax("http://url-1",data);
    r2 = yield ajax("http://url-2",data);
    r3 = yield ajax("http://url-3",data);

}catch(err){
    handle(err);
}
// 自增函数
function* next_id(){
    var current_id=1;
    while(true){
        yield current_id;
        current_id++;
    }
}

var x;
var pass = true;
var g = next_id();
for(x=1;x<100;x++){
    console.log(g.next().value);
}

4 标准对象

  • typeof
typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'
  • 包装对象
number Number
boolean Boolean
string String

// 注意就行了
123..toString();//注意是2个点!
(123).toString();
var n = Number("456");
typeof n;
"number"
var m = new Number("333");
typeof m
"object"
//typeof操作符可以判断出number、boolean、string、function和undefined
//判断Array要使用Array.isArray(arr);
//判断某个全局变量是否存在用typeof window.myVar === 'undefined';
//函数内部判断某个变量是否存在用typeof myVar === 'undefined'。
//用parseInt()或parseFloat()来转换任意类型到number;
//用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
//通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};
  • Date

  • RegExp

// \d可以匹配一个数字,\w可以匹配一个字母或数字;
// . 可以匹配任意字符
// * 表示任意个字符(包括0个),
// + 表示至少一个字符
// ? 表示0个或1个字符
// {n}表示n个字符
// {n,m}表示n-m个字符
var reg = /\d{3}\s+\d{3,8}/;//可以匹配任意个空格隔开的带区号的电话号码
// \d{3},匹配3个数字
// \s匹配一个空格(可包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ','\t\t'等 
// \d{3,8}表示3-8个数字,例如'12345'
// 如果要匹配'010-12345',
var reg2 = /\d{3}\-\d{3,8}/
  • JSON-JavaScript Object Notation,一种数据交换格式
  • 最开始设计的JSON是JavaScript的一个子集,在JSON中,一共就几种数据类型:number,boolean,string,null,array,object;
  • JSON定死了字符集必须是UTF-8,这样表示多语言就没有问题了;
  • 为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号""
  • 序列化 JSON.stringify()
'use strict'
var xiaoming = {
    name:'小明',
    age:16,
    gender:true,
    height:1.60,
    grade:null,
    'middle-school':'清苑',
    skill:['JavaScript','java','python','lisp']
};
var s = JSON.stringify(xiaoming);
console.log(s);
// 要输出好看一些,可以加上参数,按缩进输出:
JSON.stringify(xiaoming,null,' ');
// 上面第二个参数,用于控制如何筛选对象的键值,如果只想输出指定的属性,可以传入Array;
JSON.stringify(xiaoming,['name','skill'],' ');
// 还可以传入一个函数,这样,对象的每个键值对都会被函数先处理
function convert(key,value){
    if(typeof value === 'string'){
        return value.toUpperCase();
    }
    return value;
}
JSON.stringify(xiaoming,convert,' ');
// 如果还想【更精确控制】如何序列化,可以给xiaoming定义一个toJSON()方法,直接返回JSON应该序列化的数据:
var xiaoming = {
    name:'小明',
    age:16,
    gender:true,
    height:1.60,
    grade:null,
    'middle-school':'清苑',
    skills:['JavaScript','java','python','lisp'],
    toJSON:function(){
        return {
            'Name':this.name,
            'Age':this.age,
            'Height':this.height
        };
    }
}
JSON.stringify(xiaoming);
  • 反 序列化 JSON.parse()变成一个JavaScript对象
JSON.parse('[1,2,3,true]');//[1,2,3,true]
JSON.parse('{"name":"小明","age":16}');//Object {name: "小明", age: 16}
JSON.parse('true');//true
JSON.parse('123.45');//123.45

// JSON.parse()还可以接收一个函数,用来转换解析出的属性
var obj = JSON.parse('{"name":"小明","age":15}',
function(key,value){
    if(key === 'name'){
        return value+'同学';
    }
    return value;
});
console.log(JSON.stringify(obj));//{"name":"小明同学","age":15}
// 访问API获取JSON
var url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json';
$.getJSON(url,function(data){
    var city = data.query.results.channel.location.city;
    var forecast = data.query.results.channel.item.forecast;
    var result = {
        city:city,
        forecast:forecast
    };
    console.log(JSON.stringify(result,null,'  '));
})

从今天起,多吃水果和蔬菜

1 吃的:维生素C,蛋白,大豆异黄酮,蛋白质,维生素,果胶……

水果:

苹果;樱桃;柠檬;豆浆;牛奶(晚上喝);新鲜枣;杏仁;桃果核;草莓;紫葡萄;猕猴桃;桔子;火龙果;柚子;石榴(抗氧化);杏;桑葚;

蔬菜:

鸡蛋;鱼肉;西兰花;胡萝卜;白萝卜;芦笋;甘薯;蘑菇;黄瓜;冬瓜;丝瓜;大豆;西红柿;三文鱼;莲藕;豌豆;洋葱;海带;鲑鱼;燕麦;地瓜(适合早餐)水;

薏米莲子红枣粥;薏米绿豆百合粥;柑橘银耳薏米羹;薏米杏仁瘦肉汤;

2 用的

 

20170107me

1.字幕组

无意中看到了对“字幕组”的很短的采访片;

听里面被采访的字幕组人;他们是懂得奉献的人;退一步,就算不能说是无私奉献,也是有理想而奉献;他们做他们认为值得的事情;对那些硬性的冷冰冰的规章看的轻了一些;在这样的制度下,希望做出改变,不想做小打小闹的奉献者,不想一直被认为是不规范的盗窃版权;他们想要做成一个社会认可的平台,并且有更多的人主动加入进来……

2.每天唱一首歌

不去唱不符合自己价值观的歌词;

唱自己可以接受的歌词;

 

skin plan

 

  1. 早晨我的八宝粥-->大米;红小豆;花生;黑豆;黑米;黑芝麻;葵花籽;葡萄干;薏仁;桂圆;
  2. 枸杞、红枣上班泡水喝;
  3. 晚上喝三白汤;
  4. 牛奶面粉敷面膜;
  5. 黄瓜片敷脸;
  6. 沾纯水敷脸;
  7. 多吃蔬菜水果,多喝水;
  8. 每天11点前睡觉;
  9. 早晚各运动一小时;

我的菜单

  • 早餐食谱20161007

五谷粥;

水果蔬菜汤;

  • 微波炉菜肴

1 微波炉玉米

方法一:玉米+保鲜膜

洗干净玉米,上面留点水分;用保鲜膜/袋子把玉米包裹上(留水分重要,保鲜膜上插几个孔);

放入微波炉,高火七八分钟,

拿出玉米,处理袋子/保鲜膜(小心热气烫手);

微波炉煮玉米wp.jpg

方法二:还可以做出烤的口感

先在锅里用水煮十几分钟;捞出来撒上调料(刷上食用油,撒孜然粉辣椒粉啥的),放入微波炉烤5分钟;

2 薯片

土豆,油盐;

土豆切薄片;泡水里冲下去掉淀粉;

土豆片涂油撒盐,放在盘子上不加盖,微波炉高火5分钟;

拿出来看,若背面还有水分,就翻面高火1-2分钟;

3 排骨

原料:排骨;油盐、酱油;姜蒜;辣椒等等调料(依你自己口味和现有调料)

步骤:

排骨冲洗;(大块的排骨肉可以切小点,好熟)

用盐、酱油、五香粉拌排骨;

把葱姜蒜用油爆香;

爆香后的油倒在拌好的排骨上;

倒入水,没过排骨;

用保鲜膜封好,放入微波炉;高火8分钟;

(省事的话不爆香,直接把油盐酱醋、料酒、青椒等加到排骨里)

4 鸡蛋羹

鸡蛋打散,加入一些水,加一点盐香油;

高火加热211分钟,中火加热1-2分钟,保鲜膜/盖子不要盖紧;

5 煮粥

随意搭配做粥原料,熟了为底限,想要熬久点也行;

15分钟应该可以熟了;

西红柿蛋花汤最快了,一两分钟就好了;

6 红烧肉

原料:五花肉;葱姜;食用油;酱油;白糖/冰糖;

步骤:

五花肉切块;

先放葱姜食用油高火3分钟(这个可以用来代替油锅爆香);

然后放入五花肉和酱油、糖;高火十几分钟(初次做切小块熟的快);

 

7 炒其他青菜蔬菜

用开水烫下青菜,加调料,盖保鲜膜/微波炉专用薄膜,五六分钟;

8 茄子泥

茄子切条,高火加热十分钟;

拿出来,拌上调料(以自己口味和现有调料:盐,蒜泥,香油;辣椒油芝麻酱啥的)

9 烤鸡腿

原料:孜然粉;花椒;辣椒1个;盐;料酒;老抽;葱姜蒜;五香粉;(加几样就可以了)

步骤:

鸡翅洗干净,在上面划两刀/或者戳些窟窿入味;

与调料拌匀,腌1小时(额有点久,可以先处理,其间翻动几次)

入微波炉,需要翻几次面;相对麻烦;

10 总之,微波炉做菜:

原料+调料拌好;用微波炉的加热,代替油锅的翻炒;

有些可以最后撒上调料粉、香菜等;

 

 

 

 

 

 

 

 

20160827

  • 鱼香肉丝鱼香肉丝
  • 红烧排骨红烧排骨

20160902

今天晚上下班去超市买了蔬菜,加上上周剩的,有:

3个胡萝卜;半个洋葱;1大土豆;1西红柿;一整个包菜;3个细茄子;山药;南瓜;生板栗;

黑豆;红豆;大米;面粉;挂面;

那么问题来了,明天做什么吃呢;

20160903

  • 家常茄子

家常茄子

  • 面粉胡萝卜葱花粥

面粉胡萝卜葱花粥

  • 手撕包菜

手撕包菜

  • 排骨汤

排骨汤2

20160904

今天网购了蒸煮锅,以后,可以做蒸菜?

嗯,蒸煮更健康嘛~~(其实最直接的好处就是:少油烟……)

20160911

  • 姜丝丝瓜

今天用姜丝炒丝瓜,突然觉得,姜丝好香,从小时候的不喜欢姜,到后来的不排斥,到现在突然喜欢~好香;

%e5%a7%9c%e4%b8%9d%e4%b8%9d%e7%93%9c

 

  • 干锅土豆片

发现上周剩下的洋葱,就把洋葱和土豆片一起炒了,炒完出锅,再撒上些葱花;

加了洋葱-出乎意料地好吃,喜欢;撒了葱花,有提色提鲜作用,让这道菜变得有趣,更有吸引力;

%e5%b9%b2%e9%94%85%e5%9c%9f%e8%b1%86%e7%89%87

  • 蛋香茄子

这次茄子的败笔是,中途加了水……导致茄子没有那么香,不过有鸡蛋在,吃着还可以啦;

经验:茄子裹上鸡蛋液,用油煎,注意把茄子煎熟,后面再葱花爆香,炒一炒,就更加好吃啦~(如果怕茄子不容易煎熟,可以事先煮,再用油煎吧)

%e8%9b%8b%e9%a6%99%e8%8c%84%e5%ad%90

 

  • 砂锅熬粥

真的是省心,好吃!~

%e7%a0%82%e9%94%85%e7%86%ac%e7%b2%a5

 

20160915

今天尝试了,连续炒几个菜,中间不刷锅,我的方法是:一次性倒入炒几个菜的油,全部的葱姜蒜,爆香,将爆香的葱姜蒜和油倒入一个碗中,每要炒一个菜,就倒入锅中一些,不会因为没有刷锅而溅出油来了;

如果肉菜,也可以,热油,煸炒肉或者肉末,炒的差不多熟了,倒入一个碗中,可以备用ok~

厨房做菜省事小招~

  • 大盘花菜

%e5%b9%b2%e9%94%85%e8%8a%b1%e8%8f%9c

花菜先用水煮(半)熟,备用;

葱姜蒜,热油爆香;

五花肉热油爆香;

放入花菜,和小辣椒,煸炒;

沿锅壁导入一点醋,再放入酱油,翻炒;

出锅前,撒上一些韭菜,更加香;ok,很好吃;

 

  • 肉末茄子

%e8%82%89%e6%9c%ab%e8%8c%84%e5%ad%90

茄子切段蒸软,备用;

葱姜蒜,热油爆香;

肉末淀粉勾芡,热油爆香;

放入茄子,翻炒,至茄子浸入油汁;出锅;

 

  • 水晶饺子

煮熟的饺子很好看,就叫它-“水晶饺子”吧

%e9%a5%ba%e5%ad%901 %e9%9f%ad%e8%8f%9c%e9%b8%a1%e8%9b%8b%e9%a6%85%e5%84%bf  %e6%b0%b4%e6%99%b6%e9%a5%ba%e5%ad%90 %e7%8c%aa%e8%82%89%e5%a4%a7%e8%91%b1%e9%a6%85%e5%84%bf

今天因为要包饺子,和面,发现和面神器-->勺子,用它按压,不粘盆,力度均匀,从此和面不再是难事~

%e5%8b%ba%e5%ad%90%e5%92%8c%e9%9d%a2%e6%8f%89%e9%9d%a2-%e6%9d%a1

%e9%9d%a2%e5%89%82%e5%ad%90-1 %e9%9d%a2%e5%89%82%e5%ad%90-2

 

参考菜谱

  • 鱼香茄子:http://www.xiachufang.com/recipe/100125093/
  • http://www.xiachufang.com/recipe/101874371/麻辣香锅
  • http://www.xiachufang.com/recipe/1000131/糖醋排骨
  • http://www.xiachufang.com/recipe/100479788/葱油饼

20160903

  • 炸胡萝卜花

胡萝卜擦丝;

加盐,稍等片刻,出水;

加入适量面粉,搅拌均匀;

进油锅炸;

  • 萝卜丝炒土豆丝(自己取个名字:“唇红齿白”

土豆切丝洗净淀粉;

胡萝卜切丝;

爆香;

双丝翻炒,放少许水,别粘锅;

土豆断生时加适量盐;

加适量醋;

……

出锅;

  • 胡萝卜花

准备牙签;

胡萝卜切均匀薄片;

准备开水,萝卜烫5秒钟;

取一片对折,再取一片,面对面捏住,在2片胡萝卜接口的地方再接上一片;

另外一边接口处也加上一片;

牙签固定;

  • 双丝包菜卷

http://www.xinshipu.com/zuofa/11176

  • 手撕包菜

蒜,干辣椒,醋,老抽,

包菜手撕成小片;干辣椒剪成小段、蒜切片;

热油锅蒜片爆香,再放干辣椒;待炒出香味;

放卷心菜,炒至变色;放醋、老抽翻炒;【注】不要把醋浇到菜上,浇到锅壁上;

加少许糖提鲜,加少许盐;

  • 五彩土豆泥

土豆、玉米、青豆、火腿、盐、葱花;

没有玉米青豆,放胡萝卜;黄瓜;

1.在一个大碗里,用大勺子或擀面杖将蒸熟后的土豆压成泥。

2.开启中火,在平底锅里倒入少许蔬菜油,把玉米、青豆、火腿粒倒入锅里炒一小会至快熟(不要炒太久,很容易熟)。

3.再转小火,将土豆泥倒到锅里混合均匀,所有混合物再炒一小会。

4.最后倒入少许盐、黑胡椒粉混合均匀,即可起锅盛盘。

  • 茄子田乐烧

http://www.xinshipu.com/zuofa/611900

  • 紫茄

http://www.xinshipu.com/zuofa/642137

蒜头和辣椒切片备用;

一锅水,水中加少许盐和白醋,搅拌均匀;

茄子先切段,再切条,马上浸泡在盐和醋水中,不要接触空气,捞起沥干;

油锅爆香蒜片,再加茄子、辣椒大火快炒;

转小火,下<调味料>拌炒均匀,盖锅焖煮一下,直到茄子变软;

  • 鱼香茄子煲

茄子,香葱,姜末,蒜末,豆瓣酱;

鱼香汁:生抽1大勺,老抽1/2勺,糖1勺,香葱碎;

水淀粉:3勺淀粉和3勺水;

http://www.xinshipu.com/zuofa/717

  • 番茄土豆排骨汤

葱白切长段;姜切片;番茄切块;土豆去皮切块;

油爆香;放入番茄、土豆略加拌炒,关火备用;

另起锅,锅内放清水,放入排骨,大火煮开后,撇去浮沫,水变清后小火炖30分钟;

加入炒好的番茄土豆重新煮开小火30分钟;

放少许盐和胡椒粉;

 

小美人儿

让人震撼、揪心、愉悦的歌,都是好歌;

下午打开网易云音乐,查看推荐-没有好的,查看“我的歌手”,可以试一试;

徐佳莹,我们唱歌的调调(感觉)类似,尝试的各种歌,是我想尝试的;

一些男声的歌,比如“突然好想你”,孙燕姿的快歌(我一直觉得没什么调调,音色也不是很好听,但是听了徐的翻唱,或许,是让人有“一唱而快”的感觉吧(她唱下来,虽然觉得各种凌乱,但是至少,她敢唱吧));

我之所以忽视,或许是因为,我的音色,唱那些歌,不够味道,但是,管他什么听众呢,这些歌,或许,是真的可以来畅快愉悦敢动自己吧;

try it.

_____________

哦,差点忘了为什么来写这文,听着崔子格的“小美人儿”,曲风清新、日常、温暖、融洽,居然落泪动容了,这首歌,是一种憧憬、一种美好的希冀,都会,好起来的,“长大了总会有许多好事儿”……

善良-表现在-你的眼界能看到的地方

事情,有时候,确实需要去想;因为,不想的话,所有人都是,矛盾的综合体;

现象,是矛盾;

本质,是因果;

——————

她赚的多,花得奢侈,喜欢买各种名牌,一买一堆;

或许你说她能者多花,无可厚非;

或许你说她贪图享乐;

一般的人家,手头宽裕,享受一下,一般人或许不会说啥;但是一直宽裕到某种程度,一般人就会觉得不适。

其实,不管是一千、一万、还是十万,在理论道德来讲,都是一样的;

你放纵一千可以、她放纵十万或许也不该对她有何不同的看法;

我想,当她面对饱受风雨摧残的人们和爱马仕包包时,她一定会选择前者;

————————————

->人的同理心,来自于他所了解的;

他的亲人与他骨肉相连,他的朋友和他惺惺相惜,单纯的孩子们会惹他怜爱,苍苍的老人会引他敬重,眼缘觉得某些人不错会生出好感,“生命”的遭遇他会同情【我想说的是,同情,不是一种居高临下的感觉,被同情人,不需要觉得是羞辱(经典的话:“我不需要你同情我”),同情,是心灵的一种——共鸣,或许,这就是一种大爱】;

我们尝试帮人,是在对他初步的了解之上,对,他现在处于困境,我伸出援手有何不可呢,但如果当你进一步了解,他是某种顽固不化甚至是令人厌恶道德败坏,你是否该考虑住手呢;“可怜之人有可恨之处”确实有点道理的;

我们的眼界有限,能力有限,现实的真正的善应该是有尺度的,有限的爱应该给更值得的人;

————————————————————

有人说,“他们迂腐,可以拯救他们啊”,事实是,如果你就现在这样,你是无法做到的,我保持我的观点:你需要有聪明的能力和方法,突破不是莽夫之勇就可以了,揭竿而起并且有所成就的人,他们不是简单地反抗,你以为,那样,会有人听你的么,就算是整个迷信的故事让人信服了,实现更进一步的“向着进步的步伐”;一个组织,他如果不写书宣传、不活动造势,不产生感染人的力量,如何壮大力量;对,需要有计策(【我想说的是:计策,并非贬义词,有些情况下,它是睿智的象征,与善不相悖】)。

从心灵得到自由;

————————————

今天我进一步明白,为什么我会觉得,最快乐的,不是小时候,不是什么都不懂的傻乐,不是所谓的单(wu)纯(zhi),那样的,不是圣洁,而是相反,不懂爱的阶段;

【或许也是因为,自己小时候,过的更加拘束,无法为自己发言】

但是,那是一颗璞玉,雕琢地好,便是瑰宝;

如果有人单纯地想回到童年无忧无虑,那某种角度上,可以说,是不敢承担责任,是逃避,是一种自私的体现。

如果,你长大了,依然能让自己过的还不错,那,就是了。

 

阴影

小说看完了,能有这样的动力看下去,与其说是剧情的吸引,不如说,是求知欲,想要从中得到一些东西,一些能够有助于内心坦荡的东西。

这样,也确认了我的一个态度,有时间,看小说,看文字,不看电视剧;电视剧的画面,文字里基本也有,甚至印象更深;而字里行间、清晰的描述、不言中的深意都是这么的有魅力,而电视剧,或许,更多的是看个热闹、罢了。

生存态度,决定处事为人态度,求知态度,最应该排在第一位;它决定了你过的痛不痛快,虐不虐心,会在很大程度上,影响你的作为。

畏惧成为习惯后,甚至无法说清恐惧的核心是什么,这是最,那个什么:“温水煮青蛙”;

或许是吧,一千个读者有一千个哈姆雷特,我眼中,《欢乐颂》,在纵横交错的故事下面,是一条清晰地成长主线,不是物质的明显的东西,而是那种微妙的心理变化,是“当局者迷的心理魔障”,当你的魔障昭示于人,会被人觉得各种:不可思议、软弱地让人咬牙切齿、糊涂地一看就要陷入泥潭、精明人眼中的蔑视;当然,也有,精明人的作茧自缚,精神出了故障,一切都玩儿完,不论你曾经多么聪明;并且,这种魔障甚至不是生理上的,而是产生的念头(心理),这个很玄乎的东西,一般情况下,都是它主导着你。

当然,并不是人人都聪明绝顶,不是人人都会有那么严重的精神质,但这个设定,正是现实情况的抽象、缩影。

这么说吧,你作为一个正常人,姑且不论你是否绝顶聪明,已经是难得;而人或许就是存在着一些心魔:你看,大多人都没有办法从容地当众面不改色心不跳地说话;看,很多人多多少少会有一些自卑;看,难道有些虚荣下隐藏着的不是心虚?再看,那么多人无奈含苦当着隐形人;人们,在下意识地保护自己、不受心灵上的创伤,而给出看似理智略显冰冷的反应。

小说给了姑娘们完善的归宿,美好的开始;这有赖于美好的可以让人放心的另外的角色:包和赵;包,的设定,是安迪的真命天子,包,就是对安迪一见倾心,就是面对安迪的冰冷迎难而上,就是安迪因为心中阴霾决定不连累前男友(该设定,是对安迪没有xing吸引力的男人,虽温暖,但安迪就是接收不了他的亲密接触,以此人们看到-他不是安的真命天子)而分手,就是有旁枝需要安迪找包帮忙而有进一步了解包的机会(抛开偏见,了解到他确实是有能力且有志的青年),就是赶上年假,安想独自出游,而包死缠烂打似的搭同一班飞机跟过去;回来继续死缠烂打强行与安迪共室亲密,关键是,安迪理智反抗,潜意识却欢喜!总之,安迪就是该喜欢他;

安迪觉得,现在爱就爱,如果有一天包不爱她了,她会接受,然后头也不回地离开,绝不勉强;(刚开始接受包,也有想,包过去也算风流,女朋友一打,他对她,也很可能不会持久,所以,也不必内疚会拖累他)

过了个把月,忽然受提示,他真的爱我?我既没有妩媚,也不懂风情;只是因为他看重我,适合结婚?

包说,怎么会想这些,我会在你身边一辈子,不许胡思乱想;爱你,你出现后,其他都是庸脂俗粉。

安迪被他,救赎了,到最后,已经直接清晰地面对自己的恐惧核心点,轻松;敢于畅想和他在一起的日子,敢于憧憬他们孩子出生之后的事……

包,就是这样一个设定。

而赵,优质医学博士,工作行为正派,生活又风趣不古板,被小妖精经过十几天的不懈努力成功勾搭上,当天就发生了关系;他爱这样活跃的,古灵精怪的,性感的小妖精,这是他(作为好孩子)所向往的;

小妖精最初,是看上赵的男色,也一直为该男色反常地贤惠;

后来一次偶然打牌,赵看到了小妖精不择手段、行为低劣的本性,又不学无术,骄傲如他,觉得自己忍受不了这么“没趣的人(所谓有趣-有文化人的互动乐趣”);

小妖精伤心欲绝,继续痴心追,可赵躲瘟神似的躲她;她故意在微博放上和其他男人的合照,竟然就一下子触动了赵,对的,赵吃醋了;好了,现在他原则啥的全抛脑后去了,打电话给小妖精,假托说是打错,小妖精晚上没回家,他在楼道痴痴地等……呵呵,没等到……反正没过几天,复合了……过了不知个把月,付账误会,小妖精讨好又讨好出了祸,小妖精觉得这样互相委屈,分了吧,她还是爱他(哭),他也爱她,她说分吧,他居然一口答应……又有相关联的事而见面,小妖精又三番五次出现在他面前,妖精的好本性真性情他看在眼里,来来回回……(她)我回了,就帮到这,(他)神奇地马上说到:我送你,不由分说脱下白马褂扯起妖精就走,看的人好生快意,又复合了;

兜兜转转,磨合一次、两次、他们还是要在一起,或许,他一次又一次想通了,最后,他在了解她的本性,了解她的劣性,分析她的劣性渊源的基础上,依然爱她,有商有量。他们,是天生一对。赵和包某种类似,他们开放,享受爱,但有思想,有气量,大度,皮实,情感理所应当地专一,不会被诱惑,好似根本不用担心似的。

赵爱妖精的全部,和缓地循循善诱,她,我想,自然会越来越可爱。

樊大姐吃尽千辛万苦,摆脱流氓哥哥,变得独立自尊,她的美,自然有人来欣赏,看吧,青年才俊上门儿了。

一直觉得自己平平相貌没有人爱的小关,我想,小谢离开公务员的工作,去看大海,他,会崭新地摆脱心理阴影回来的;只有他,欣赏你的脱俗之美。

程序员小应只因饭局上,小妖精玩笑漏风,得知莹莹不是处女,毅然与莹莹分开,过年回家相亲;相亲后发一微博:你的清纯,即使你穿着厚厚的棉衣,在我心里,也是长裙飘飘的样子。后续带回海市,日久见人心,女方要求各种过分,同时还有不讲理的家属,这时候小应又想到莹莹的各种好,又找人家吃饭,就这次,被女方找人当场一顿打,小应为护住莹莹伤筋动骨,莹莹较轻伤,送医院……

……中间又是诸多周折

出院,结婚;新婚之夜后,一切安好。