学习笔记

undefined 与null

ECMAScript认为undefined是从null派生出来的,所以把它们定义为相等的

表面上 undefined 与 null 都是什么都没有的意思,但是实际上null表示"没有对象",即该处不应该有值。 undefined表示"缺少值",就是此处应该有一个值,但是还没有定义(初始化);

 

类型转换

强制转换

Number():严格转换,不允许出现任何非数字的字符,否则NaN;直接转换
parseFloat() :它的使用规则和parseInt()基本一致,唯一的差别就是,他可以是小数,这里要注意的点就是后面的              表示浮点的英文单词是大写的,本人有时候会打出小写,使得无法实现转换;
parseInt():(1)从左向右依次转换,能转就转换,碰到不能转换的就停止,如果第一个就不能转换则,                     console.log出NaN,非法数值型
            (2)、它是把要转换的字符转换成整数
Boolean(): 将非逻辑值转换为逻辑值

隐式转换

基本类型:
   运算符(+,-,*,/,%)操作时 转换类型
当String和其他类型进行加号运算时,其他类型都会转为 String;其他情况,都转化为Number类型 , 注: undefined 转化为Number是 为’NaN‘, 任何Number与NaN相加都为NaN。
其他运算符时, 基本类型都转换为 Number,String类型比如: '1a' ,'a1' 转化为 NaN 
​
关系运算
    运算符两边一个字符,一个数值,字符型转换成数值型进行关系运算。
    运算符两边一个布尔型,一个数值,布尔型转换成数值型进行关系运算。
    运算符两边一个字符,一个字符串,逐个比较ASCII码。
    运算符两边一个字符,一个布尔型,都转换成数值型进行关系运算
if()
    规则:其他数据类型转布尔型
    数值型:非0为true,0为false
    字符型:非空为true,空为false
    null undefined  ---> false

说说对html语义化的理解

**语义化的理解:

一、html语义化就是让页面的内容结构化,便于对浏览器,搜索引擎解析;

二、在没有样式CSS的情况下页以一种文档格式显示,并且是容易阅读的。

三、搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于SEO。

四、使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

px和em的区别

px表示像素 (计算机屏幕上的一个点:1px = 1/96in),是绝对单位,不会因为其他元素的尺寸变化而变化;

em表示相对于父元素的字体大小。em是相对单位 ,没有一个固定的度量值,而是由其他元素尺寸来决定的相 对值。

  1. 相同点:px和em都是长度单位;

  2. 异同点:px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。

  3. 浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。

文件内容读取 - readFile(异步)

- 第一个参数:?
- 第二个参数:?       
- 第三个参数:?
  • 第一个参数:文件路径。 相对路径和绝对路径均可。

  • 第二个参数: 配置项,可选参数。主要用来配置字符集。一般可设置为'utf8'

如果不设置该参数,文件内容会以二进制形式返回。

  • 参数3: 读取完成后触发的回调函数。有两个参数 --- err 和 data

    • 读取成功

      • err: null

      • data: 文件内容,如果不设置参数2,则返回二进制数据。可以使用 toString() 方法将二进制数据

        转为正常字符串

    • 读取失败

      • err: 错误对象

      • data: undefined

示例:

const fs = require("fs")
fs.readFile('文件路径',"utf8", (err, data) => {
  if (err) throw err;
  console.log(data);
});

let、var、const的区别

let 的用法类似于 var

var:1)声明在函数外部 2)未定义直接赋值的变量 3)所有Window对象 let:局部变量 只在所处块级作用域有效 没有变量提升 会出现暂时性死区 特性(在声明前使用let变量会报错) const:定义常量 通常不可变 声明的同时必须赋值 否则报错。(1).在javascript中我们通常使用var会发生变量提升,即脚本开始运行时,变量已经存在了,但是没有值,所以会输出 undefined,   而let不会发生变量提升,这表示在声明它之前,变量是不存在的,这时如果用到它,就会抛出一个错误。

  (2).var 是函数级作用域,let是块级作用域:

  {     let a = 10;

    var b = 1;

  }

  a // ReferenceError:a is not defined.

  b // 1

  容易发生错误:

  var a = [];

  for(var i = 0; i < 10; i++){     a[i] = function(){       console.log(i);

    };

  }

  a6; // 10;

  如果将var i 改为 let i 此时a6; 结果是6;

  (3).let不允许在相同作用域内,重复声明同一个变量:

   function(){     let a = 10;

    var a = 1;

  }

  //报错

  function(){     let a = 10;

    let a = 1;

  }

  //报错

  (4).const声明一个只读的常量。一旦声明,常量的值就不能改变

  const PI = 3.1415;

  PI = 3;

  //TypeError: Assignment to constant variable.

  (5).const命令声明的常量也是不提升,只能在声明的位置后面使用。

  {     const a = 10;

  }

  console.log(a);

  //报错

  (6).const声明的常量,也与let一样不可重复声明

  (7).对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,

  所以将一个对象声明为常量必须非常小心。

  const t = {};

  t.prop = 123;

  console.log(t.prop); // 123

  t = {}; // 报错

this对象有什么特点?

this始终指向它的直接调用者,如果有new关键字,则指向new出来的那个对象,另外,在setTimeout等异步事件中,始终指向全局window对象

 

Express默认并不处理HTTP请求体中的数据,对于普通请求体(JSON、二进制、字符串)数据,可以使用body-parser中间件。而文件上传(multipart/form-data请求),可以基于请求流处理,也可以使用formidable模块或Multer中间件。

\1. multer中间件

Multer是Express官方推出的,用于Node.jsmultipart/form-data请求数据处理的中间件。

它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/form-data之外的用户请求。

Express默认并不处理HTTP请求体中的数据,对于普通请求体(JSON、二进制、字符串)数据,可以使用body-parser中间件。而文件上传(multipart/form-data请求),可以基于请求流处理,也可以使用formidable模块或Multer中间件。

\1. multer中间件

Multer是Express官方推出的,用于Node.jsmultipart/form-data请求数据处理的中间件。

它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/form-data之外的用户请求。

\2. 安装

npm install multer --save \3. 使用

Multer在解析完请求体后,会向Request对象中添加一个body对象和一个file或files对象(上传多个文件时使用files对象 )。其中,body对象中包含所提交表单中的文本字段(如果有),而file(或files)对象中包含通过表单上传的文件。

基本使用示例如下:

var express = require('express') var multer = require('multer') var upload = multer({ dest: 'uploads/' }) var app = express() app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file 是 avatar 文件 // req.body 对象中是表单中提交的文本字段(如果有) }) app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { // req.files 是 photos 文件数组 // req.body 对象中是表单中提交的文本字段(如果有) }) var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }]) app.post('/cool-profile', cpUpload, function (req, res, next) { // req.files 是一个对象 (String -> Array),文件的字段名是其 key,文件数组是 key的值 // // 如: // req.files'avatar' -> File // req.files['gallery'] -> Array // // req.body 对象中是表单中提交的文本字段(如果有) })

在使用中,如果仅需要处理multipart表单中的文本字段,可以使用multer中的.single() 、 .array()或fields()方法。

如,可以像下面这样使用.array()方法:

var express = require('express') var app = express() var multer = require('multer') var upload = multer() app.post('/profile', upload.array(), function (req, res, next) { // req.body 中包含文本字段 }) \4. multer的API 4.1 文件对象

multer解析完上传文件后,会被保存为一个包含以下字段的对象:

fieldname - 表单提交的文件名(input控件的name属性) ​ originalname - 文件在用户设备中的原始名称 ​ encoding - 文件的编码类型 ​ mimetype - 文件的Mime类型 ​ size - 文件的大小 ​ destination - 文件的保存目录(DiskStorage) ​ filename - 文件在destination中的名称(DiskStorage) ​ path - 上传文件的全路径(DiskStorage)

buffer - 文件对象的Buffer(MemoryStorage)

4.2 方法

multer(opts) - 创建对象

引用multer模块后,我们会获取到一个顶级方法。该方法是一个工厂函数,可以使用这个方法创建Multer对象。它接受一个选项对象,最基本的选项是dest,它告诉 Multer 文件的存储位置。如果忽略该选项,文件会被保存在内存中,并且永远不会写入硬盘中。

默认情况下,Multer会对文件进行重命令,以避免名称冲突。重命名函数,可以按需要自定义。

Multer的选项对象中可以包含以下值:

dest或storage - 文件存储位置 ​ fileFilter - 函数,控制可上传的文件类型 ​ limits - 上传数据限制(文件大小)

在一般的Web应用中,只有dest选项需要设置。使用示例如下:

var upload = multer({ dest: 'uploads/' })

如果需要对上传文件做更多控制,可以使用storage代替dest,Multer会将存储引擎由DiskStorage(硬盘存储)切换为MemoryStorage(内存存储)。

创建multer对象后,我们可以使用以下实例来接收上传文件:

.single(fieldname) - 单个文件上传

接收一个名为fieldname的上传文件,所上传的文件会被保存在req.file。

.array(fieldname[, maxCount]) - 多个文件上传

接收名为fieldname的,多个上传文件数组。可选参数maxCount表示可接受的文件数量,上传文件数超出该参数指定的数据后会抛出一个错误。文件数组会被保存在req.files中。

.fields(fields) - 多个文件上传

接收通过fields指定的多个上传文件。文件数组对象会被保存在req.files中。

fields是一个包含对象的数组,对象中会包含name和maxCount两个属性:

[ { name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 } ]

.none() - 仅解析文本字段

仅解析文本字段。如果请求中有任何上传文件,会触发'LIMIT_UNEXPECTED_FILE'错误。这个方法与upload.fields([])类似。

.any() - 接收所有文件

接收请求中的所有文件。上传文件数组会被保存在req.files中。

4.3 选项参数

storage - 存储引擎

该选项有以下两个可选项:

DiskStorage - 硬盘存储 ​ MemoryStorage - 内存存储

.diskStorage(obj)与硬盘存储

硬盘存储引擎提供了将文件存储到磁盘的完全控制:

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/my-uploads') }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()) } }) var upload = multer({ storage: storage })

.diskStorage()方法提供了文件存储位置控制权限,该方法接收一个对象参数,其中包含两destination和filename两个属性。

destination用于设置文件的存储目录,可以是一个函数或字符串。若未提供该参数,将使用系统的临时目录。

filename用于设置文件名。若未提供该参数,将使用一个随机字符串,且文件名中不包含扩展名。

.memoryStorage()与内存存储

内存存储引擎会以Buffer的形式将文件保存在内存中。该方法没有任何参数:

var storage = multer.memoryStorage() var upload = multer({ storage: storage })

limits - 文件尺寸

该选项用于设置文件尺寸,Multer 会将这个对象传递至busboy中。limits对象中可以包含以下可选值:

fieldNameSize - 字段名最大尺寸。默认值:100 bytes ​ fieldSize - 字段值最大尺寸。默认值:1MB ​ fields - 非文件字段的最大数量。默认值:Infinity ​ fileSize - multipart 表单中,文件的最大尺寸。默认值:Infinity ​ files - multipart 表单中,文件最大数量。默认值:Infinity ​ parts - multipart 表单中,最大组件(fields+files)数量。默认值:Infinity

headerPairs - 默认值:2000

fileFilter - 文件筛选

fileFilter用于控制要哪些文件是可接受的,哪些是要被拒绝的。使用形式如下:

function fileFilter (req, file, cb) { // 需要调用回调函数 cb, // 并在第二个参数中传入一个布尔值,用于指示文件是否可接受 // 如果要拒绝文件,上传则传入 false。如: cb(null, false) // 如果接受上传文件,则传入 true。如: cb(null, true) // 出错后,可以在第一个参数中传入一个错误: cb(new Error('I don't have a clue!')) }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值